개요
Java에서 Iterable을 Stream으로 변환하려면 StreamSupport.stream() 메서드를 활용하면 됩니다. 이 메서드는 Spliterator를 기반으로 순차 또는 병렬 스트림을 손쉽게 생성해 줍니다.
변환 방법
먼저 다음과 같은 Iterable이 있다고 가정해 보겠습니다.
Iterable<String> i = Arrays.asList("K", "L", "M", "N", "O", "P");이제 커스텀 메서드를 호출하여 스트림을 생성합니다.
Stream<String> s = convertIterable(i);
위 코드에서 사용된 convertIterable()은 직접 정의한 변환 메서드로, 구현 내용은 다음과 같습니다.
public static <T> Stream<T> convertIterable(Iterable<T> iterable) {
return StreamSupport.stream(iterable.spliterator(), false);
}StreamSupport.stream()의 두 번째 인자가 false이면 순차 스트림(sequential stream)을, true이면 병렬 스트림(parallel stream)을 생성한다는 점을 기억하세요.
전체 예제 코드
다음은 Java에서 Iterable을 Stream으로 변환하는 전체 프로그램입니다.
import java.util.*;
import java.util.stream.*;
public class Demo {
public static <T> Stream<T> convertIterable(Iterable<T> iterable) {
return StreamSupport.stream(iterable.spliterator(), false);
}
public static void main(String[] args) {
Iterable<String> i = Arrays.asList("K", "L", "M", "N", "O", "P");
Stream<String> s = convertIterable(i);
System.out.println("Iterable to Stream: "+s.collect(Collectors.toList()));
}
}
실행 결과
Iterable to Stream: [K, L, M, N, O, P]
핵심 정리
Iterable의spliterator()메서드를 호출하여 Spliterator 객체를 얻습니다.StreamSupport.stream(spliterator, parallel)을 호출하여 스트림으로 변환합니다.- 두 번째 인자에
false를 전달하면 순차 스트림이 생성됩니다.