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" */