web-dev-qa-db-ja.com

Collection.stream()。filter()。forEach()は、各ループの標準と比較して非効率ですか?

IntelliJ IDEAは、次のfor-eachループをJava 8の "forEach"呼び出しに置き換えることをお勧めします。

    for (Object o : objects) {
        if (o instanceof SomeObject) {
            doSomething();
        }
    }

推奨される呼び出しは次のようになります。

objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething());

ストリームの基本的な機能がどのように機能するかを誤解していない限り、ストリームの使用は標準のfor-eachのO(2n)操作ではなくO(n)操作であるように思えますループ。

15
Mirrana

構文が何を意味するかにかかわらず、Javaストリームはステートメントごとに1回コレクションを反復しません。チェーン全体を各要素に1つずつ適用します。

あなたの場合、ストリームはループのように動作します。要素を取り、それを述語と照合して、操作を適用し、次の要素に進みます。

22
Rosa Richter