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의 기본 기능이 어떻게 작동하는지 오해하지 않는 한, 스트림 사용은 표준 for-each 루프의 O (n) 연산과 반대로 O (2n) 연산 인 것처럼 보입니다.
8
왜 O ^ 2라고 생각합니까? 실제로 스트림은 (a) 더 좋은 구문을 허용하고 (b) 추가 오버 헤드를 발생 시키지 않기 위해 특별히 고안 되었습니다. (실제로, 그들은 종종 게으른 평가를 통해 오버 헤드를 줄 입니다.)
—
Kilian Foth
구문을 기반으로하면 필터링을 반복 한 다음 필터링 된 객체를 두 번 반복하여 코드를 실행하는 것처럼 보입니다.
—
Mirrana
비록 그렇게하더라도 여전히 O (2 * N), 즉 O (N), 즉 선형이고 2 차적이지 않습니다. 그러나 실제로 반복은 서로 인터리브되며 결과가 이미 알려진 경우 둘 다 일찍 종료 될 수 있습니다. 이것이 바로 스트림의 아름다움입니다. Java 8의 스트림을 읽는 데 15 분을 소비 할 가치가 있습니다. Venkat Subramaniam이 쓴 것처럼``람다 표현은 Java 8의 관문 약물이지만 스트림은 진정한 중독입니다. ''
—
Kilian Foth
게다가 : 당신의 루프는 반 패턴입니다;)
—
토마스 정크
@ThomasJunk 반 패턴에 대해 설명 할 수 있습니까? 나는 이것에 익숙하지 않다.
—
Mirrana