더북(TheBook)

11
그룹핑과 파티셔닝

앞 절에서 특정 국가에서 사용하는 모든 언어를 모으는 방법을 살펴봤다. 하지만 과정이 조금은 지루했다. 각 맵 값에 대해 싱글톤 집합을 생성하고, 기존 값과 새 값을 병합할 방법을 명시해야 했다. 성질이 같은 값들의 그룹을 만드는 일은 아주 흔한 작업으로, groupingBy 메서드는 그룹 작업을 직접 지원한다.

로케일을 국가별로 묶는 문제를 살펴보자. 먼저 다음과 같은 맵을 만든다.


Map<String, List<Locale>> countryToLocales = locales.collect(

Collectors.groupingBy(Locale::getCountry));


 

Locale::getCountry는 그룹핑의 분류 함수classifier function다. 이제 다음과 같이 지정한 국가 코드에 해당하는 모든 로케일을 조회할 수 있다.


List<Locale> swissLocales = countryToLocales.get("CH");

// 로케일 [it_CH, de_CH, fr_CH]를 돌려준다.


 

<Note>

로케일에 관해 빠르게 복습해보자. 각 로케일은 언어 코드(영어인 경우 en)와 국가 코드(미국인 경우 US)를 포함한다. 로케일 en_US는 미국에서 사용하는 영어를 말하며, en_IE는 아일랜드에서 사용하는 영어를 말한다. 몇몇 국가에는 여러 로케일이 있다. 예를 들어, ga_IE는 아일랜드에서 사용하는 게일어다. 또한 앞의 예에서 볼 수 있듯이 저자의 JVM은 스위스의 세 가지 로케일을 파악하고 있다.

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