더북(TheBook)

이 책의 예제 코드에 방금 소개한 해법을 자바 8 함수형 스타일로 작성해두었다. 다음은 아스키와 16비트 유니코드, 유니코드 대리 쌍을 모두 지원하는 함수형 스타일 해법이다.

public static String firstNonRepeatedCharacter(String str) {
  Map<Integer, Long> chs = str.codePoints()
    .mapToObj(cp -> cp)
    .collect(Collectors.groupingBy(Function.identity(),
      LinkedHashMap::new, Collectors.counting()));

  int cp = chs.entrySet().stream()
    .filter(e -> e.getValue() == 1L)
    .findFirst()
    .map(Map.Entry::getKey)
    .orElse(Integer.valueOf(Character.MIN_VALUE));

  return String.valueOf(Character.toChars(cp));
}

코드를 더 자세히 이해하려면 001. 문자 개수 세기 절의 001.1 유니코드 문자는 어떻게 처리할까? 절을 참고한다.

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