스트림(Stream)은 자바 8부터 추가된 컬렉션 요소를 람다식으로 처리할 수 있도록 돕는 함수형 프로그래밍 API입니다. 스트림은 배열이나 컬렉션 인스턴스에 함수를 적용하여 원하는 결과를 필터링하고 가공하는데 사용됩니다. 여러 스레드를 사용하여 작업을 병렬로 처리할 수 있도록 지원하기 때문에, 대용량 데이터 처리에 적합합니다.
중간 연산은 Stream을 반환하기 때문에, 여러 개의 중간 연산을 연결할 수 있습니다.
주어진 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
주어진 함수에 따라 요소를 매핑합니다.
@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
중첩된 스트림을 하나의 스트림으로 평탄화합니다.
중복 요소를 제거합니다.
요소를 정렬합니다.
@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