リスト内でヌルを持つとき、ストリームに日付リストの最大を取得する方法

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を返すという意味で異なっています。

あまり目立たないオプションは、交換することですnullLocalDate.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空のリストのため。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=185635&siteId=1