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());
Если я не понимаю, как работает базовая функциональность Stream, мне кажется, что использование stream - это операция O (2n), а не операция O (n) для стандартного цикла for-each.
java
performance
java8
Mirrana
источник
источник
Ответы:
Потоки Java не проходят по вашей коллекции один раз для каждого оператора, несмотря на то, что подразумевается в синтаксисе. Он применяет всю цепочку к каждому элементу, по одному элементу за раз.
В вашем случае поток будет работать точно так же, как цикл. Возьмите элемент, сравните его с вашим предикатом, затем примените вашу операцию, затем перейдите к следующему элементу.
источник