단어 빈도 수 계산을 위한 Java 8 구현
주어진 목록 내에서 단어의 빈도를 식별하는 것은 자연어 처리에서 필수적인 작업입니다. Java 8은 강력한 스트림 API와 내장 수집기를 사용하여 단어 발생 횟수를 효율적으로 계산하는 다양한 접근 방식을 제공합니다.
문제:
다음 단어 목록을 고려하세요. :
<code class="java">List<String> wordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");</code>
목표는 각 단어의 빈도 수를 결정하여 다음과 같은 출력을 얻는 것입니다.
<code class="java">{ciao=2, hello=1, bye=2}</code>
Java 8 솔루션:
기존 메소드와 달리 Java 8은 다른 접근 방식을 사용합니다.
<code class="java">Map<String, Long> collect = wordsList.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));</code>
이 코드 줄에서 stream() 메소드는 wordList에서 요소 스트림을 시작하는 데 사용됩니다. 이후 Collectors.groupingBy()는 ID(단어 자체)를 기반으로 요소를 수집하고 Collectors.counting()은 각 발생 빈도를 계산합니다.
정수의 경우 코드를 약간 수정할 수 있습니다.
<code class="java">Map<String, Integer> collect = wordsList.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(e -> 1)));</code>
값별 정렬:
또한 결과 지도는 단어 빈도의 내림차순으로 정렬할 수 있습니다.
<code class="java">LinkedHashMap<String, Long> countByWordSorted = collect.entrySet() .stream() .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) .collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> { throw new IllegalStateException(); }, LinkedHashMap::new ));</code>
이 추가 코드 조각 스트림에 항목 세트를 추가하고 값을 기준으로 내림차순으로 정렬한 다음 항목을 LinkedHashMap에 수집하여 정렬된 순서를 유지합니다.
위 내용은 목록에서 단어 빈도를 효율적으로 계산하기 위해 Java 8의 Stream API를 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!