이 질문에 다르게 작업 정렬 방법에 대한 실행 기준은 somhow Java 8 Stream - Filter and foreach method not printing as expected 내가 정렬, 필터 및 Java 8 스트림의지도 방법 함께 일하고자바 8 스트림 - 필터 및지도 방법
관련이있다.
Stream.of("d2", "a2", "b1", "b3", "c")
.sorted((s1, s2) -> {
System.out.printf("sort: %s; %s\n", s1, s2);
return s1.compareTo(s2);
})
.filter(s -> {
System.out.println("filter: " + s);
return s.startsWith("a");
})
.map(s -> {
System.out.println("map: " + s);
return s.toUpperCase();
})
.forEach(s -> System.out.println("forEach: " + s));
을 그리고 내가 가진 출력은 다음과 같습니다 :
종류 다음과 같이 위에서 언급 한 질문의 답변에 지정된 필터와 맵의 작동 방식을 염두에 키핑, 나는 정렬 방법을 시도 A2를 ; d2 정렬 : b1; a2 정렬 : b1; d2 정렬 : b1; a2 정렬 : b3; b1 정렬 : b3; d2 정렬 : c; b3 정렬 : c; D2 필터 : 지도 A2 : A2 필터 : B1 필터 : B3 필터 : 대해 forEach A2 필터 C :이다
D2 이제 정렬 방법은 완전한 루프를 실행하고있다 필터 및 맵 기능은 개별 항목에서 실행됩니다. 3 개 모두 중간 기능이므로 모두 동일한 방식으로 작동해야합니다. 실행 순서가 괜찮습니까? 나는 내가 잘못하고있는 것을 얻지 못하고있다.
어떻게 당신이 그들을 보는 모든없는 요소를 정렬 할 수 있습니다? 'distinct()'와 동일합니다. 여전히 게으르다.'forEach'가 없으면'sorted' 연산이 호출되지 않을 것이다. – Tunaki
@KaranVerma 정말 많은 질문을하고 몇 가지를 읽는 것을 중단해야합니다. – Eugene
스트림 파이프 라인은 forEach가 순서가 지정되지 않은 터미널 op이기 때문에 여기에서 정렬을 완전히 제거 할 수 있습니다. 이전 버전에서는 그랬지만, 때로는 공격적으로 적용되기 때문에 최적화가 제거되었습니다. – the8472