2016-12-28 8 views
2

나는 오라클의 스트림 API 자바 1.8 과정을하고있는 중이 야 그리고 내가 강의 노트 정독하는 동안이 우연히 :"별개의()"와 "groupingBy"

정렬되지 않은() :

- BaseStream

에서 상 속됨는 - (내부적으로 사용) 정렬되지 않은 것입니다 스트림

을 반환 - 독특한 같은 작업의 효율() 및 groupingBy()

012을 향상시킬 수 있습니다

여기 내 질문입니다. 정렬되지 않은 속성은 어떻게하면 더 효율적인 계산으로 이어질 수 있습니까? distinct()groupingBy()

답변

3

병렬 스트림의 경우에만 의미가 있습니다. 주문 병렬 스트림의 경우, distinct() 작동, 그것은, 즉 안정성 보장거야 유지하기 위해 중복 된 요소에 대한

를 추가 작업을 할 수있다, 만남 위해 처음으로 나타나는 요소는 그대로 유지됩니다

합니다 (javadoc for Stream.distinct()에서 API 주 부분을 참조. 순서화 병렬 스트림의 경우

, 이러한 보증 스트림. 이런 식으로, 순서화 paralle에서 정렬 특성을 제거 이미 정렬되지 않은 한, 계속 될 필요가 없다 스트림을 사용하면 distinct() 작업의 성능을 크게 향상시킬 수 있습니다.

마찬가지로, groupingBy() 연산의 경우 스트림 순서를 보존해야한다는 요구 사항을 해제하면 병렬 스트림의 경우 작 업 자체의 효율성을 크게 향상시킬 수 있으므로 축소 자체를 동시에 수행 할 수 있습니다. 이것은 콜렉터 또는 스트림 자체가 순서가 지정되지 않은 상태에서 동시 콜렉터가있는 병렬 스트림에서 콜렉션하는 동안에 만 발생합니다. 실질적으로 Stream.collect(groupingBy(..)) 대신 Stream.collect(groupingByConcurrent(..))을 사용해야합니다. 자세한 내용은 javadoc Stream.collect()Collector을 참조하십시오.