lamda式foreachでbreakを疑似的に再現する方法【Java】

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)));
java
この記事を書いた人

エンジニアとして仕事をしています。
仕事や趣味を通して、開発やプログラミングについて学んだことを綴っていきます。
 ・実務経験は、WEBシステムのサーバーサイドコーディングがメイン
 ・アプリ開発は趣味程度

akihiro-takedaをフォローする
akihiro-takedaをフォローする
プログラミング・開発の備忘録
タイトルとURLをコピーしました