java8 스트림에서의 처리 순서를 확인하는 방법
내부 목록을 처리하고 싶다.XML
object.java는 모든 요소를 확실하게 처리해야만 받을 수 있습니다.
'아예'로 전화하면 요?sequential
stream
사용한다고요?list.stream().sequential().filter().forEach()
아니면 평행선을 사용하지 않는 한 스트림만 사용해도 될까요? list.stream().filter().forEach()
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★요.sequential
★★parallel
그러나 당신은 순서대로 상품을 처리하고 싶기 때문에 주문에 대해 물어봐야 합니다.순서 있는 스트림이 있고 순서 유지를 보증하는 작업을 수행하는 경우 스트림이 병렬로 처리되는지 순차적으로 처리되는지는 중요하지 않습니다.실장에서는 순서가 유지됩니다.
릅릅릅릅 릅릅릅릅 릅릅릅 e 。예 :: you you you you you you you youstream()
HashSet
호출하는 동안 스트림이 정렬되지 않습니다.stream()
List
순서 있는 스트림을 반환합니다.에 전화를 걸어 주문 계약을 해제하고 성능을 향상시킬 수 있습니다.스트림이 순서를 정하지 않으면 순서를 재정립할 수 없습니다.(질서가 없는 스트림을 순서가 있는 스트림을 변환하는 유일한 방법은 호출하는 것입니다.sorted
단, 결과 주문이 반드시 원래 주문일 필요는 없습니다).
패키지 매뉴얼의 "Ordering" 섹션도 참조하십시오.
전체 스트림 운영에서 순서를 유지하려면 스트림의 소스, 모든 중간 작업 및 터미널 작업에 대한 문서를 검토하여 순서를 유지하는지 여부(또는 원래 소스에 순서가 있는지 여부)를 확인해야 합니다.
이는 매우 미묘할 수 있습니다. 예를 들어 순서 없는 스트림을 생성하는 동안 순서가 지정된 스트림을 생성하는 것입니다.또, 오더를 유지하지 않기 때문에, 질문에서 자주 실수를 하는 것에 주의해 주세요.스트림의 요소를 일정한 순서로 처리하려면 를 사용해야 합니다.
만약 의 ★★★★★★★★★★★★★★★★★★★★★★★★★.list
하신 것은 java.util.List
은 , ,는 것입니다.stream()
method는 순서 있는 스트림을 반환하고filter
순서는 변경되지 않습니다. list.stream().filter() .forEachOrdered()
모든 요소가 순차적으로 처리됩니다.list.parallelStream().filter().forEachOrdered()
요소들은 병렬로 처리될 수 있지만(예를 들어 필터에 의해) 터미널 액션은 여전히 순서대로 호출됩니다(이것은 병렬 실행의 이점을 감소시킵니다).
예를 들어 다음과 같은 작업을 사용할 경우
List<…> result=inputList.parallelStream().map(…).filter(…).collect(Collectors.toList());
전체 작업은 병렬 실행의 이점을 얻을 수 있지만 결과 목록은 병렬 스트림을 사용하든 순차 스트림을 사용하든 상관없이 항상 올바른 순서로 표시됩니다.
한마디로:
순서는 소스 데이터 구조와 중간 스트림 작업에 따라 달라집니다.를 들어, ''를 요.List
정해야 filter
의
상세:
순차 vs 병렬 vs 무질서:
S sequential()
Returns an equivalent stream that is sequential. May return itself, either because the stream was already sequential, or because the underlying stream state was modified to be sequential.
This is an intermediate operation.
S parallel()
Returns an equivalent stream that is parallel. May return itself, either because the stream was already parallel, or because the underlying stream state was modified to be parallel.
This is an intermediate operation.
S unordered()
Returns an equivalent stream that is unordered. May return itself, either because the stream was already unordered, or because the underlying stream state was modified to be unordered.
This is an intermediate operation.
스트림 순서:
스트림에는 만남 순서가 정의되어 있을 수도 있고 정의되어 있지 않을 수도 있습니다.스트림에 조우 순서가 있는지 여부는 소스 및 중간 작업에 따라 달라집니다.특정 스트림 소스(목록 또는 배열 등)는 본질적으로 순서가 지정되지만 다른 스트림 소스(HashSet 등)는 순서가 지정되지 않습니다.sorted()와 같은 일부 중간 연산에서는 순서가 매겨지지 않은 스트림에 조우 순서를 부과할 수 있으며 BaseStream.unordered()와 같은 다른 중간 연산에서는 순서가 매겨지지 않은 스트림을 렌더링할 수 있습니다.또, 일부의 단말 조작은, ForEach() 등, 조우 순서를 무시하는 경우가 있습니다.
스트림이 순서일 경우 대부분의 연산은 요소에서 조우 순서로 작동하도록 제한됩니다. 스트림의 소스가 [1, 2, 3]을 포함하는 목록인 경우 맵(x -> x*2)을 실행한 결과는 [2, 4, 6]이어야 합니다.단, 선원에 정의된 조우 순서가 없는 경우 값 [2, 4, 6]의 순열이 유효합니다.
시퀀셜 스트림의 경우 조우 순서의 유무는 퍼포먼스에 영향을 주지 않고 결정론에만 영향을 줍니다.스트림이 정렬된 경우 동일한 소스에서 동일한 스트림파이프라인을 반복적으로 실행하면 동일한 결과가 생성됩니다.순서가 지정되지 않은 경우 반복 실행으로 인해 다른 결과가 발생할 수 있습니다.
이는 매우 미묘할 수 있습니다. 예를 들어 순서 없는 스트림을 생성하는 동안 순서가 지정된 스트림을 생성하는 것입니다.또, 오더를 유지하지 않기 때문에, 질문에서 자주 실수를 하는 것에 주의해 주세요.스트림의 요소를 일정한 순서로 처리하려면 를 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/29216588/how-to-ensure-order-of-processing-in-java8-streams
'programing' 카테고리의 다른 글
vuex axios 응답에서 스토리지가 제대로 작동하지 않음 (0) | 2022.06.30 |
---|---|
다른 함수에서 글로벌 함수(Vue.protype.myFn)에 액세스하는 방법 (0) | 2022.06.30 |
"triggerScroll" 이벤트를 트리거하는 것은 무엇입니까? (0) | 2022.06.30 |
마운트된 Vue 인스턴스의 속성을 업데이트하는 방법 (0) | 2022.06.30 |
밸브라인드를 사용하여 메모리 누수를 찾는 방법 (0) | 2022.06.30 |