728x90
반응형
Java의 Stream API는 순서에 따라 동작할 수도 있고, 그렇지 않을 수도 있습니다.
이는 스트림의 유형과 사용한 연산에 따라 달라집니다.
1. Stream의 순서
- 순차 스트림 (Stream)
- 기본적으로 Stream은 소스 데이터의 순서를 유지합니다.
- 예를 들어, List에서 스트림을 생성한 경우, 리스트의 요소 순서가 스트림 연산에서도 유지됩니다.
List<String> list = Arrays.asList("A", "B", "C", "D");
list.stream()
.forEach(System.out::println); // 출력 순서: A, B, C, D
- 병렬 스트림 (parallelStream)
- 병렬 스트림은 데이터의 순서를 보장하지 않을 수 있습니다.
- 여러 스레드를 사용해 데이터를 처리하기 때문에 실행 순서가 달라질 가능성이 있습니다.
list.parallelStream()
.forEach(System.out::println); // 출력 순서가 다를 수 있음: D, A, B, C
2. 순서를 지키는 연산
- filter, map, collect 등의 중간 및 종료 연산은 기본적으로 순서를 유지합니다.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = numbers.stream()
.filter(n -> n % 2 == 0) // 짝수만 필터링
.map(n -> n * 2) // 두 배로 변환
.collect(Collectors.toList());
System.out.println(result); // 출력: [4, 8]
3. 순서를 깨뜨릴 수 있는 연산
일부 연산은 순서를 유지하지 않거나 순서를 고려하지 않는 옵션을 제공합니다.
- unordered():
- 스트림에서 순서를 신경 쓰지 않도록 명시적으로 지정할 수 있습니다. 이 경우, 순서를 최적화하는 방식으로 동작할 수 있습니다.
list.stream()
.unordered() // 순서 무시
.forEach(System.out::println);
- 병렬 스트림 (parallelStream):
- 병렬 스트림은 순서를 보장하지 않습니다. 순서가 중요하면 병렬 스트림에서 forEachOrdered를 사용해야 합니다.
list.parallelStream()
.forEachOrdered(System.out::println); // 순서 보장: A, B, C, D
728x90
반응형
'Front > JS & jQuery' 카테고리의 다른 글
[js][Echarts] label 위치 수정 / position (0) | 2025.01.28 |
---|---|
[js][Echarts] 가로 bar 차트에서 y 축 데이터 순서 변경하는 법 / inverse (0) | 2025.01.27 |
[jQuery] 문자열 합치기 (0) | 2025.01.18 |
[js] .find() (0) | 2025.01.17 |
[js] swiper 기본 옵션 설명 (0) | 2025.01.16 |