728x90
반응형
자바8에서 추가된 쪼갤 수 있는 기능을 가지고 있는 iterator란 뜻으로, Split + Iterator 인 Spliterator 인터페이스는 병렬 작업에 특화되어있다.
즉 Iterator가 반복이라면, Spliterator는 분할 가능한 반복이다.
Iterator
import java.util.*;
public class Solution3 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("콜팝");
list.add("치킨");
list.add("곱창");
list.add("팝콘");
list.add("피자");
Iterator<String> listIterator = list.iterator();
while(listIterator.hasNext()){
System.out.println(listIterator.next());
}
}
}
// result
콜팝
치킨
곱창
팝콘
피자
Process finished with exit code 0
spliterator
import java.util.*;
public class Solution3 {
public static void main(String[] args) throws InterruptedException {
List<String> list = new ArrayList<>();
list.add("콜팝");
list.add("치킨");
list.add("곱창");
list.add("팝콘");
list.add("피자");
Spliterator<String> spliterator1 = list.spliterator();
Spliterator<String> spliterator2 = spliterator1.trySplit();
// 1. forEach 람다 사용
spliterator1.forEachRemaining(s -> System.out.println(s));
System.out.println("====== 구분선 ======");
spliterator2.forEachRemaining(s -> System.out.println(s));
// 2. forEach 메소드 사용
spliterator1.forEachRemaining(System.out::println);
System.out.println("====== 구분선 ======");
spliterator2.forEachRemaining(System.out::println);
// 3. tryAdvance 반복문 사용
while(spliterator1.tryAdvance(System.out::println));
System.out.println("====== 구분선 ======");
while(spliterator2.tryAdvance(System.out::println));
}
}
// result
곱창
팝콘
피자
====== 구분선 ======
콜팝
치킨
Process finished with exit code 0
- 1. 2. 3. 사용 방식은 모두 똑같은 결과를 반환한다.
- spliterator는 순서를 보장하지 않으며, 먼저 저장된 데이터가 분리되는 데이터(spliterator2)로 이동한다.
- 데이터가 홀수인 경우 분리되는 데이터가 하나 더 적게 가져간다.
주요 메서드 | 기능 |
boolean tryAdvance | 원소가 있으면 true, 없으면 false 리턴 |
Spliterator<T> trySplit | 두개의 spliterator로 쪼개 병렬처리가 가능하게함 |
void forEachRemaining | 각 요소에 대해 지정된 작업을 순차적으로 수행 |
long estimateSize | 사이즈 반환(널이면 -1 반환) |
int characteristics | 특성을 포함하는 int값 반환 |
// TODO 멀티쓰레드 적용
728x90
반응형
'JAVA > Modern JAVA' 카테고리의 다른 글
[JAVA 8] 날짜/시간 표현 (Instant, ZonedDateTime, LocalDateTime, Period) (0) | 2022.11.16 |
---|---|
[JAVA 8] 함수형(Functional) 인터페이스 와 람다(Lambda)표현식 (0) | 2022.10.12 |