Java 8 스트림의 각 주문과 각 주문의 비교
이 방법들은 실행 순서가 다르다는 것은 이해하지만 모든 테스트에서 다른 주문을 실행할 수 없습니다.
예:
System.out.println("forEach Demo");
Stream.of("AAA","BBB","CCC").forEach(s->System.out.println("Output:"+s));
System.out.println("forEachOrdered Demo");
Stream.of("AAA","BBB","CCC").forEachOrdered(s->System.out.println("Output:"+s));
출력:
forEach Demo
Output:AAA
Output:BBB
Output:CCC
forEachOrdered Demo
Output:AAA
Output:BBB
Output:CCC
두 가지 방법으로 다른 출력이 생성되는 예를 제시해 주십시오.
Stream.of("AAA","BBB","CCC").parallel().forEach(s->System.out.println("Output:"+s));
Stream.of("AAA","BBB","CCC").parallel().forEachOrdered(s->System.out.println("Output:"+s));
두 번째 줄은 항상 출력됩니다.
Output:AAA
Output:BBB
Output:CCC
첫 번째 주문은 주문이 지켜지지 않기 때문에 보장되지 않습니다. forEachOrdered는 스트림의 요소가 시퀀셜인지 병렬인지에 관계없이 스트림의 요소를 소스로부터 지정된 순서로 처리합니다.
Javadoc에서 인용:
이 조작의 동작은 명시적으로 확정적이지 않습니다.병렬 스트림 파이프라인의 경우, 이 작업은 스트림의 조우 순서를 존중하는 것을 보장하지 않습니다. 그렇게 하면 병렬 처리의 이점이 희생되기 때문입니다.
자바독이 다음과 같이 명시할 때(강조 광산):
스트림에 만남 순서가 정의된 경우 스트림의 만남 순서로 이 스트림의 각 요소에 대해 액션을 수행합니다.
일일 ~일도 although although although although 。forEach좀 더 짧고 예뻐보여도 좋을 것 같아서forEachOrdered순서가 중요한 모든 장소에서 명시적으로 지정합니다.의 경우 " " "forEach순서를 존중하고 API 내부 코드 사용도 스트리밍하는 것 같습니다. forEach순차적인 스트림의 경우)forEachOrdered그럼에도 불구하고 나중에 스트림을 병렬로 변경하기로 결정하면 코드가 깨집니다., 「 」를 는, 「 」를 사용합니다.forEachOrdered코드 판독기에는 다음과 같은 메시지가 표시됩니다."잘 될 수 ."따라서 코드를 더 잘 문서화할 수 있습니다.
, 「」는 과 같습니다.forEach만 아니라 방법은 ).forEachOrdered를 참조해 주세요.
으로 둘 다forEach/forEachOrdered거의 쓸모가 없습니다.뿐만 아니라 낼 . 즉, '부작용'이 아니라 '부작용'을 할가 있습니다. 따라서 다음과 같은 작업을 수행할 수 있습니다.reduce ★★★★★★★★★★★★★★★★★」collect더 적합할 겁니다.에 의한 forEach보통 나쁜 스타일로 생각됩니다.
forEach()메서드병렬 스트림의 경우 이 작업은 스트림의 순서를 유지하는 것을 보장하지 않습니다.
forEachOrdered()method는 이 스트림의 각 요소에 대해 액션을 수행하여 정의된 만남 순서를 가진 스트림에 대해 각 요소가 만남 순서로 처리되도록 합니다.
다음 예를 들어보겠습니다.
String str = "sushil mittal";
System.out.println("****forEach without using parallel****");
str.chars().forEach(s -> System.out.print((char) s));
System.out.println("\n****forEach with using parallel****");
str.chars().parallel().forEach(s -> System.out.print((char) s));
System.out.println("\n****forEachOrdered with using parallel****");
str.chars().parallel().forEachOrdered(s -> System.out.print((char) s));
출력:
****forEach without using parallel****
sushil mittal
****forEach with using parallel****
mihul issltat
****forEachOrdered with using parallel****
sushil mittal
병렬 스트림과 함께 Each Ordered()를 사용하면 병렬 처리의 이점을 잃을 수 있습니다.
아시다시피 Each() 메서드를 사용하면 병렬 프로그래밍 요소가 병렬로 인쇄됩니다.순서는 고정되지 않습니다.그러나 병렬 스트림에서 ForEachOrder()의 순서를 고정합니다.
Stream.of("AAA", "BBB", "CCC") 각 주문에 대해 (s-> System.out.println("출력:"+s");출력:AAA 출력:BBB 출력:CCC
언급URL : https://stackoverflow.com/questions/32797579/foreach-vs-foreachordered-in-java-8-stream
'source' 카테고리의 다른 글
| MySQL 필드 DATETIME이 ISO8601을 잘라냅니다. (0) | 2023.01.25 |
|---|---|
| INSERT...에서 2행의 영향을 받는 이유는 무엇입니까?중복된 키 업데이트 시? (0) | 2023.01.25 |
| 컨텍스트 또는 액티비티 외부 getString (0) | 2023.01.25 |
| Safari 및 Chrome 데스크톱 브라우저에서 비디오 자동 재생이 작동하지 않습니다. (0) | 2023.01.25 |
| size_t의 정의는 어디서 찾을 수 있습니까? (0) | 2023.01.25 |