더북(TheBook)

map을 사용하면 함수가 각 요소에 적용되며, 리턴 값들이 새로운 스트림으로 모인다. 이번엔 다음처럼 단지 값 하나가 아닌, 값들의 스트림을 리턴하는 함수가 있다고 하자.


public static Stream<Character> characterStream(String s) {

List<Character> result = new ArrayList<>();

for (char c : s.toCharArray()) result.add(c);

return result.stream();

}


 

예를 들어, characterStream( "boat")는 스트림 ['b', 'o', 'a', 't']를 리턴한다. 이 메서드를 문자열의 스트림에 맵핑한다고 하자.


Stream<Stream<Character>> result = words.map(w -> characterStream(w));


 

결과로 [... ['y', 'o', 'u', 'r'], ['b', 'o', 'a', 't'], ...]처럼 스트림들로 구성된 스트림을 얻는다. 이 스트림을 문자들의 스트림 [... 'y', 'o', 'u', 'r', 'b', 'o', 'a', 't', ...]으로 펼쳐내려면 map 대신 flatMap을 사용한다.


Stream<Character> letters = words.flatMap(w -> characterStream(w))

// 각 단어를 대상으로 characterStream을 호출하고 결과들을 펼친다.


신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.