더북(TheBook)

mapping은 함수를 다운스트림 결과에 적용하며, 이 결과를 처리하는 데 필요한 또 다른 컬렉터를 요구한다. 다음 예제를 보자.


Map<String, Optional<String>> stateToLongestCityName = cities.collect(

groupingBy(City::getState,

mapping(City::getName,

maxBy(Comparator.comparing(String::length)))));


 

여기서는 도시를 주별로 묶는다. 각 주에서 도시들의 이름을 얻고 최대 길이로 리듀스한다.

mapping 메서드는 또한 앞 절의 문제에 좀 더 훌륭한 해결책을 제시하는데, 각 국가에서 사용하는 모든 언어의 집합을 모으려면 다음과 같이 한다.


Map<String, Set<String>> countryToLanguages = locales.collect(

groupingBy(l -> l.getDisplayCountry(),

mapping(l -> l.getDisplayLanguage(),

toSet())));


 

앞 절에서는 groupingBy 대신 toMap을 사용했다. 이번 형태에서는 개별 집합들을 결합하는 일은 신경 쓸 필요가 없다.

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