컬렉션 데이터를 효율적으로 처리하는 기능
다양한 메서드들이 있어 데이터를 연속 처리하거나 반복적으로 처리할 때 도움이 된다.
filter(), map(), collect() 등의 다양한 메서드
루프나 조건문을 사용해야 할 때 이 메서드들로 간단한 코드를 짤 수 있다.
이 외에도 다양한 장점이 있는데 추후 다른 포스트로 연결하도록 하겠다.
map은 스트림의 각 요소를 변환한다. 변경 사항을 각 요소에 적용해준다.
다음 코드를 살펴보자.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Words {
public static void main(String[] args) {
List<String> words = Arrays.asList("hello", "hi", "hey");
// 각 단어 앞에 "WOW!"를 붙이고 대문자로 변환
List<String> funWords = words.stream()
.map(word -> "WOW! " + word.toUpperCase())
.collect(Collectors.toList());
System.out.println(Words); // [WOW! hello, WOW! hi, WOW! hey]
}
}
flatMap은 각 요소를 여러 개의 요소로 변환하고, 그 결과를 평탄화(flatten) 해서 하나의 스트림으로 합친다.
여기서 평탄화란 중첩된 다차원 리스트, 예를 들어 2d 리스트가 있다하면 그것을 한 줄의 리스트로 만들어주는 것을 의미한다.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class FunFlatMap {
public static void main(String[] args) {
// 중첩된 리스트
List<List<Integer>> listOfLists = Arrays.asList(
Arrays.asList(1, 2),
Arrays.asList(3, 4, 5),
Arrays.asList(6, 7, 8)
);
// flatMap을 사용해서 숫자들 앞에 "WOW!"를 추가하고 평탄화
List<String> funList = listOfLists.stream()
.flatMap(list -> list.stream()
.map(num -> "WOW! " + num)) // 숫자 앞에 "WOW!" 추가
.collect(Collectors.toList());
System.out.println(funList); // [WOW! 1, WOW! 2, WOW! 3, WOW! 4, WOW! 5, WOW! 6, WOW! 7, WOW! 8]
}
}
두 메서드는 모두 스트림의 각 요소를 변환하는데 사용
하지만 동작 방식이 다르다.