더북(TheBook)

10
맵으로 모으기

Stream<Person>의 요소들을 맵으로 모아서 추후 ID로 사람을 조회할 수 있게 하려 한다고 하자. Collectors.toMap 메서드는 각각 맵의 키와 값을 생산하는 두 함수 인자를 받는다. 예를 들면, 다음과 같다.


Map<Integer, String> idToName = people.collect(

Collectors.toMap(Person::getId, Person::getName));


 

값이 실제 요소여야 하는 일반적인 경우에서는 두 번째 함수로 Function.identity()를 사용한다.


Map<Integer, Person> idToPerson = people.collect(

Collectors.toMap(Person::getId, Function.identity()));


 

키가 같은 요소가 두 개 이상이면 컬렉터는 IllegalStateException을 던진다. 이 동작은 기존 값과 새 값을 받아서 키에 해당하는 값을 결정하는 세 번째 함수 인자를 제공하는 방법으로 재정의할 수 있다. 여기서 세 번째 인자로 제공하는 함수는 기존 값, 새 값 또는 두 값의 조합을 리턴할 수 있다.

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