>  기사  >  Java  >  스트림을 사용하여 Java 8에서 단어 빈도를 계산하는 방법은 무엇입니까?

스트림을 사용하여 Java 8에서 단어 빈도를 계산하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-31 05:54:30327검색

How to Count Word Frequencies in Java 8 Using Streams?

스트림을 사용하는 Java 8의 단어 빈도 계산

목록 내 단어의 빈도를 계산하는 것은 텍스트 처리에서 일반적인 작업입니다. Java 8에서는 Collectors.groupingBy() 및 Collectors.counting() 메서드를 사용하여 이를 효율적으로 달성할 수 있습니다.

문자열 목록에서 단어 빈도를 찾으려면 다음 단계를 사용할 수 있습니다.

  1. 목록에서 stream()을 호출하여 스트림을 만듭니다.
  2. Collectors.groupingBy(Function.identity())를 사용하여 값별로 스트림의 요소를 그룹화합니다.
  3. Collectors.counting()을 사용하여 각 단어의 발생 횟수를 계산합니다.

예를 들어 다음 단어 목록이 주어지면

List<String> wordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");

단어 빈도를 다음과 같이 계산할 수 있습니다. 다음은 다음과 같습니다.

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

이렇게 하면 단어 빈도가 포함된 맵이 생성됩니다. 여기서 키는 단어이고 값은 발생 횟수입니다. 주어진 목록의 결과는 다음과 같습니다.

{ciao=2, hello=1, bye=2}

값별로 지도를 정렬하려면 LinkedHashMap 및 EntrySet() 메서드를 사용하여 지도 항목을 스트림으로 수집할 수 있습니다. 그런 다음 sorted()를 사용하여 값을 기준으로 내림차순으로 항목을 정렬하고 Collectors.toMap()을 사용하여 항목을 새로운 LinkedHashMap으로 수집합니다.

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
    ));

이렇게 하면 단어가 다음과 같이 정렬된 정렬된 맵이 생성됩니다. 빈도를 나타냅니다.

위 내용은 스트림을 사용하여 Java 8에서 단어 빈도를 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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