<aside> 💡 스트림(Stream)은 자바 8부터 추가된 컬렉션(배열 포함)의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다.
</aside>
자바 7 이전까지는 List<String>
컬렉션에서 요소를 순차적으로 처리하기 위해 Iterator
반복자를 다음과 같이 사용해왔다.
List<String> list = Arrays.asList("홍길동", "신용권", "감자바");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
String name = iterator.next();
System.out.println(name);
}
Stream
을 사용해서 변경할 수 있다.List<String> list = Arrays.asList("홍길동", "신용권", "감자바");
Stream<String> stream = list.stream();
stream.forEach(name -> System.out.println(name));
java.util.Collection
)의 stream()
메소드로 스트림 객체를 얻고, stream.forEach(name -> System.out.println(name));
메소드를 통해 컬렉션의 요소를 하나씩 출력한다.
forEach()
메소드는 다음과 같이 Consumer
함수적 인터페이스 타입의 매개값을 가지므로, 컬렉션의 요소를 소비할 코드를 람다식으로 기술할 수 있다.void forEach(Consumer<T> action);
IteratorVsStreamExample.java
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Stream;
public class IteratorVsStreamExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("홍길동", "신용권", "감자바");
//Iterator 이용
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String name = iterator.next();
System.out.println(name);
}
System.out.println();
//Stream 이용
Stream<String> stream = list.stream();
stream.forEach(name -> System.out.println(name));
}
}
실행 결과
Stream
은 Iterator
와 비슷한 역할을 하는 반복자이지만 많은 차이점을 가지고 있다.