Bartek:
私は、コードを次のようしています。
List<LocalDate> dates = Arrays.asList(null, null,
LocalDate.now(), LocalDate.now().minusDays(9));
LocalDate max = dates.stream()
.max(Comparator.nullsLast(Comparator.naturalOrder())).get();
私は最大を取得しようとすると、どちらがnullポインタ例外を生成しますが、分を取得しようとしたとき、それは大丈夫動作します。不明で、原因はそうmax
取るComparator
ハンドルが値をヌルいます。ストリーム保存ヌル値を持つように配列をソートする方法。
ちなみに、私はのJavaDocを確認しmax
ている状態を、:
最大の要素がnullの場合、NullPointerExceptionが@throws
EDIT:
LocalDate max = dates.stream()
.max(Comparator.nullsLast(Comparator.naturalOrder())).orElse(null);
同様にNULLポインタをスローします。
ピーターLawrey:
あなたは答えがあることを期待している場合null
、それは1が含まれているため、あなたはあなた自身の削減を行うことができます。
List<LocalDate> dates = Arrays.asList(null, null,
LocalDate.now(), LocalDate.now().minusDays(9));
LocalDate max = dates.stream()
.reduce(LocalDate.MIN,
BinaryOperator.maxBy(Comparator.nullsLast(Comparator.naturalOrder())));
System.out.println(max);
版画
null
注:これは空のリストがLocalDate.MINを返すという意味で異なっています。
あまり目立たないオプションは、交換することですnull
しLocalDate.MAX
、これは使用されることはありませんと仮定します。
LocalDate max = dates.stream()
.map(d -> d == null ? LocalDate.MAX : d)
.max(Comparator.naturalOrder())
.map(d -> LocalDate.MAX.equals(d) ? null : d)
.orElse(null);
これが返すnull
空のリストのため。