더북(TheBook)

두 번째 해법은 자바 8의 스트림 기능을 활용한다. 이 해법은 세 단계로 이뤄진다. 처음 두 단계에서는 주어진 문자열을 Stream<Character>로 변환하고, 나머지 한 단계에서는 문자를 분류하고 센다. 단계는 다음과 같다.

1. 원래 문자열에 String.chars() 메서드를 호출한다. 이 메서드는 IntStream을 반환한다. IntStream은 주어진 문자열 내 문자를 정수로 표현한다.

2. mapToObj() 메서드로 IntStream을 문자 스트림으로 변환한다(이 메서드는 정수 표현을 사람이 읽기 쉬운 문자 형태로 변환한다).

3. 끝으로 문자를 분류하고(Collectors.groupingBy()) 센다(Collectors.counting()).

위 세 단계를 메서드 하나로 합치면 다음과 같다.

public Map<Character, Long> countDuplicateCharacters(String str) {
  Map<Character, Long> result = str.chars()
    .mapToObj(c -> (char) c)
    .collect(Collectors.groupingBy(c -> c, Collectors.counting()));

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