parallel() 또는 parallelStream()으로 병렬처리 가능| 특징 | 자바 스트림 (Stream) | 코틀린 시퀀스 (Sequence) |
|---|---|---|
| 언어와 플랫폼 | 자바 8+의 표준 라이브러리 | 코틀린에 최적화된 API |
| 구현 방식 | 자바 컬렉션과 배열에서 작동 | Sequence 인터페이스는 코틀린 컬렉션과 연관 |
| 상태 여부 | 소모형으로 재사용 불가능 | 상태 없음 (재사용 가능) |
| 기본 자료형 지원 | 기본 자료형용 스트림 제공 (IntStream, DoubleStream 등) | 일반 시퀀스 (Sequence) 사용 |
| 동작 방식 | 파이프라인 전체가 최종 연산 시 한꺼번에 평가. 중간 연산들은 지연되며, 최종 연산이 호출될 때 전체 흐름이 실행 | 단일 항목 단위로 지연 평가. 하나의 항목이 다음 연산으로 바로 전달되고 처리. 연산이 체이닝 되어 있어도 항목 하나씩 순차적으로 진행 |
| 멀티스레딩 지원 | 병렬 스트림(parallelStream())으로 멀티스레딩 가능 | 시퀀스 자체는 멀티스레딩을 지원하지 않음 |
| 최종 연산 결과 | 컬렉션, 단일 값, 또는 특화된 스트림 결과 반환 | 컬렉션 또는 단일 값으로 변환 가능 |
| 호환성 | 코틀린 컬렉션과 호환하려면 변환필요 | 자바 컬렉션과도 호환 가능 |
numbers.stream()
.map(n -> {
System.out.println("map: " + n);
return n * 2;
})
.filter(n -> {
System.out.println("filter: " + n);
return n > 2;
})
.forEach(n -> System.out.println("result: " + n));
/*
map: 1
map: 2
map: 3
filter: 2
filter: 4
filter: 6
result: 4
result: 6
모든 map 수행 후 모든 filter 수행
*/
-시퀀스
numbers.asSequence()
.map {
println("map: $it")
it * 2
}
.filter {
println("filter: $it")
it > 2
}
.forEach {
println("result: $it")
}
/*
map: 1
filter: 2
map: 2
filter: 4
result: 4
map: 3
filter: 6
result: 6
각 항목 단위로 실행
*/