이 책의 예제 코드에 방금 소개한 해법을 자바 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 유니코드 문자는 어떻게 처리할까? 절을 참고한다.