1. ホーム
  2. java

[解決済み] findFirst()が最初に見つけた要素がNullの場合、なぜNullPointerExceptionを投げるのでしょうか?

2022-10-31 20:45:38

質問

なぜ java.lang.NullPointerException ?

List<String> strings = new ArrayList<>();
strings.add(null);
strings.add("test");

String firstString = strings.stream()
        .findFirst()      // Exception thrown here
        .orElse("StringWhenListIsEmpty");
        //.orElse(null);  // Changing the `orElse()` to avoid ambiguity

の最初の項目は stringsnull であり、これは全く問題ない値である。さらに findFirst() オプションで を返しますが、これは findFirst() を処理することができます。 null s.

EDIT: 更新された orElse() をより曖昧にならないように更新しました。

どのように解決するのですか?

この原因は Optional<T> を返すことにあります。オプショナルには null . 基本的に、これは "it isn't there" と "it is there, but it is set to ... の状況を区別する方法を提供しません。 null と設定されています。

そのため ドキュメント を明示的に禁止しています。 null で選択された findFirst() :

投げます。

NullPointerException - 選択された要素が null