> Java > java지도 시간 > 목록에서 단어 빈도를 효율적으로 계산하기 위해 Java 8의 Stream API를 어떻게 사용할 수 있습니까?

목록에서 단어 빈도를 효율적으로 계산하기 위해 Java 8의 Stream API를 어떻게 사용할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-11-03 14:51:02
원래의
996명이 탐색했습니다.

How can Java 8's Stream API be used to efficiently count word frequencies in a list?

단어 빈도 수 계산을 위한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿