Beginner's Hack

復習用。誰かのためになれば...

Java - Stream.findFirst()

JavaのStreamはfor文などを使用せずに、中間操作を組み合わせて配列などの抽出、データ編集ができて便利。

その中で、配列の中から一つのオブジェクトを抽出する方法として、findFirst(),findAny()がある。 ただし、これらのメソッドで取得できるのはOptional型なので、注意が必要である。

Optional型から元のオブジェクトを取り出すには、get()があるが使用方法を誤ると例外を発生させてしまう。

    List<String> strList = Arrays.asList("aaa", "bbb", "ccc" );

    String str1 = strList.stream().findFirst().get(); /* "aaa" */

    String str2 = strList.stream().filter(str -> "xxx".equals(str)).findFirst().get(); /* NoSuchElementException */

これを避けるためには、orElse()などでOptionalに値がない場合の初期値を与えた方が良い。

    String str3 = strList.stream().filter(str -> "xxx".equals(str)).findFirst().orElse("yyy"); /* "yyy" */