java8以降で使用可能となったlamda(ラムダ)式のforeachでは、breakを使うことはできません。breakと同じ流れを疑似的に実装する一例を紹介していきます。
Stream.filterを利用する
Stream.filterは、指定した条件に一致するstreamを取得し直すことが可能です。
Stream.filter(条件)
lamda式foreachでbreakを疑似的に実装する方法
厳密にはbreakではないのですが、条件付きでstreamを再生成したり、特定のindexを取得したりしてbreakを使ったときと同じ状況を再現できます。
特定の条件を満たす分だけ処理する
List<String> list = new ArrayList<String>(); list.add("みかん"); list.add("もも"); list.add("りんご"); list.add("バナナ"); list.add("メロン"); // 3回だけ処理する IntStream.range(0, list.size()).filter(index -> index < 3).foreach(index -> System.out.println(list.get(index))); // 特定の条件を満たす分処理する list.filter(name -> name.equals("もも") || name.equals("りんご")).foreach(System.out.println(name)));
特定の条件に一致するindexを取り出す
List<String> list = new ArrayList<String>(); list.add("みかん"); list.add("もも"); list.add("りんご"); list.add("バナナ"); list.add("メロン"); Optional optional = IntStream.range(0, list.size()).filter(index -> list.get(index).equals("もも")).reduce((result, element) -> {return element;}); System.out.println(list.get(optional.getAsInt()));
特定の条件を満たすデータが合ったら処理する
List<String> list = new ArrayList<String>(); list.add("みかん"); list.add("もも"); list.add("りんご"); list.add("バナナ"); list.add("メロン"); list.filter(name -> name.equals("もも")).findFirst().ifPresent(name -> System.out.println(name)));