Java の list.forEach() と list.stream().forEach() の違いは何ですか?

WBOY
リリース: 2023-04-24 22:07:06
転載
1543 人が閲覧しました

まず第一に、これらの関数は配列の各要素を走査し、入力パラメーターの accept() メソッドを実行することですが、実装方法が異なり、特定のケースでは、実行により異なる結果が生成されます。

ほとんどの場合、どちらも同じ結果を生成しますが、いくつかの微妙な違いが見られます。

概要

まず、反復可能なリストを作成します:

List<String> list = Arrays.asList("A","B","C","D");
ログイン後にコピー

最も簡単な方法は、拡張された for ループを使用することです:

for(String s : list"){
    //something
}
ログイン後にコピー

関数を使用する Java では、forEach() を使用することもできます。これをコレクションに対して直接実行できます:

Consumer<String> consumer = s -> {System.out::println};
list.forEach(consumer);
ログイン後にコピー

または、コレクションのストリームで forEach() を呼び出すこともできます:

list.stream().forEach(consumer);
ログイン後にコピー

どちらのバージョンもリストを反復処理してすべての要素を出力します:

ABCD ABCD

この単純な例では、使用する forEach() に違いはありません。

Difference

list.forEach() は拡張された for ループを使用します

default void forEach(Consumer<? super T> action) {
      Objects.requireNonNull(action);
      for (T t : this) {
          action.accept(t);
      }
  }
ログイン後にコピー

list.stream().forEach(): まずコレクションをストリームに変換し、次に、ストリームを反復します。

トラバース中に削除する場合、forEach はすぐに失敗する可能性があり、stream().forEach() は配列がトラバースされるまで待機してから例外をスローします

public class DeleteDifference {
   public static void main(String[] args) {
       List<String> list = Arrays.asList("A", "B", "C", "D");

       try {
           list.forEach(item -> {
               System.out.println(item);
               list.remove(0);
           });
       } catch (Exception e) {
           e.printStackTrace();
       }

       list.stream().forEach(item -> {
           System.out.println(item);
           list.remove(0); 
       });
   }
}
ログイン後にコピー

以上がJava の list.forEach() と list.stream().forEach() の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート