>Java >java지도 시간 >스트림을 사용하여 Java 8에서 단어 빈도를 효율적으로 계산하려면 어떻게 해야 합니까?

스트림을 사용하여 Java 8에서 단어 빈도를 효율적으로 계산하려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-11-03 12:33:02618검색

How can I efficiently count word frequencies in Java 8 using streams?

Java 8의 단어 빈도 계산: 간소화된 접근 방식

Java 8에서는 목록에 있는 단어의 빈도를 우아하게 계산할 수 있습니다. 스트림을 사용합니다.

다음 예제 목록을 고려해보세요. List wordList = Lists.newArrayList("안녕하세요", "안녕", "ciao", "안녕", "ciao");. 단어 빈도를 계산하기 위해 Collectors.groupingBy 및 Collectors.counting 수집기를 활용합니다.

<code class="java">Map<String, Long> wordFrequencies = wordsList.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));</code>

이 코드는 먼저 문자열 ID로 목록 요소를 그룹화하여 키가 고유한 단어이고 값이 다음과 같은 맵을 효과적으로 만듭니다. 그들의 수. Collectors.counting 수집기는 자동으로 각 단어의 개수를 늘립니다.

결과 맵인 wordFrequency는 인쇄 시 {ciao=2, hello=1, bye=2}와 유사합니다.

또는 다른 방법 , 정수 값 개수의 경우:

<code class="java">Map<String, Integer> wordFrequencies = wordsList.stream()
     .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(e -> 1)));</code>

이 변형은 Collectors.summingInt를 사용하여 정수 개수를 누적합니다.

결과 맵을 값별로 정렬하려면 추가 스트림과 수집기를 연결할 수 있습니다.

<code class="java">LinkedHashMap<String, Long> countByWordSorted = wordFrequencies.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>

이러한 정렬을 통해 가장 자주 발생하는 단어가 지도에서 첫 번째로 표시됩니다.

위 내용은 스트림을 사용하여 Java 8에서 단어 빈도를 효율적으로 계산하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.