스트림(Stream)은 자바 8부터 추가된 컬렉션 요소를 람다식으로 처리할 수 있도록 돕는 함수형 프로그래밍 API입니다. 스트림은 배열이나 컬렉션 인스턴스에 함수를 적용하여 원하는 결과를 필터링하고 가공하는데 사용됩니다. 여러 스레드를 사용하여 작업을 병렬로 처리할 수 있도록 지원하기 때문에, 대용량 데이터 처리에 적합합니다.

중간 연산

중간 연산은 Stream을 반환하기 때문에, 여러 개의 중간 연산을 연결할 수 있습니다.

filter(Predicate<? super T> predicate);

주어진 Predicate에 따라 요소를 필터링합니다.

@Test
public void testFilter() {
    List<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("ddd");

    list.stream()
        .filter(s -> s.length() == 1)
        .forEach(System.out::print);
}

[결과]
abc

map(Function<? super T, ? extends R> mapper);

주어진 함수에 따라 요소를 매핑합니다.

@Test
public void testMap() {
    List<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
		list.add("ddd");

    list.stream()
				.map(String::toUpperCase)
				.forEach(System.out::print);
}
[결과]
ABCDDD

flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);

중첩된 스트림을 하나의 스트림으로 평탄화합니다.

distinct();

중복 요소를 제거합니다.

sorted();

요소를 정렬합니다.

@Test
public void testSort() {
    List<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("ddd");

    list.stream()
				.sorted(Comparator.reverseOrder())
				.forEach(System.out::println);
}
[결과]
ddd
c
b
a

peek(Consumer<? super T> action);