オブジェクトのリストをnull許容フィールドの1つで並べ替えたい。
NullPointerexception
を避けるために、私はComparator.nullsLast
。ただし、例外は引き続き発生します。
public class Test {
public static void main(String[] args) {
List<Bean> l = new ArrayList<>();
for (int i=0;i<5;i++) {
Bean b = new Bean("name_"+i,i);
l.add(b);
}
l.get(2).setVal(null);
System.out.println(l);
Collections.sort(l, Comparator.nullsLast(Comparator.comparing(Bean::getVal)));
System.out.println(l);
}
static class Bean{
String name;
Integer val;
// omit getters & setters & constructor
}
}
この種類のリストを並べ替えるにはどうすればよいですか?
Comparator.nullsLast
を2回使用する必要があります。
list.sort(nullsLast(comparing(Bean::getVal, nullsLast(naturalOrder()))));
nullsLast
はBean
オブジェクトがnullの場合を処理します。nullsLast
は、Bean::getVal
の戻り値がnullの場合を処理します。リストにnull
値がないことが確かな場合は、最初のnullsLast
を省略できます(@Holgerで注記されています)。
list.sort(comparing(Bean::getVal, nullsLast(naturalOrder())));
あなたはおそらく使用することができます:
Collections.sort(l, Comparator.comparing(Bean::getVal,
Comparator.nullsLast(Comparator.naturalOrder())));