• 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을 사용했다. 이번 형태에서는 개별 집합들을 결합하는 일은 신경 쓸 필요가 없다.