IntelliJ IDEA hat mir gerade empfohlen, die folgende for-each-Schleife durch einen Java 8 "forEach" -Aufruf zu ersetzen:
for (Object o : objects) {
if (o instanceof SomeObject) {
doSomething();
}
}
Der empfohlene Anruf würde so aussehen:
objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething());
Sofern ich nicht falsch verstehe, wie die zugrunde liegende Funktionalität von Stream funktioniert, scheint mir die Verwendung von Stream eine O (2n) -Operation im Gegensatz zu einer O (n) -Operation für den Standard für jede Schleife zu sein.
java
performance
java8
agent154
quelle
quelle
Antworten:
Java-Streams durchlaufen Ihre Sammlung nicht einmal für jede Anweisung, unabhängig davon, was die Syntax impliziert. Es wird die gesamte Kette auf jedes Element angewendet, jeweils ein Element.
In Ihrem Fall würde der Stream genau wie die Schleife funktionieren. Nehmen Sie ein Element, vergleichen Sie es mit Ihrem Prädikat, wenden Sie dann Ihre Operation an und fahren Sie mit dem nächsten Element fort.
quelle