"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How can I efficiently count word frequency in a list using Java 8?

How can I efficiently count word frequency in a list using Java 8?

Published on 2024-11-08
Browse:665

How can I efficiently count word frequency in a list using Java 8?

Counting Word Frequency with Java 8

In web development and data analysis, understanding the frequency of words is crucial. To achieve this, we'll delve into how to count the frequency of words in a list using Java 8.

Java 8 Solution

The Stream API in Java 8 provides an elegant solution for word frequency counting. To begin, create a list of words:

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

The core logic involves grouping the words by their identity and counting the occurrences:

Map collect = wordsList.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

This produces a map where each key is a unique word, and the corresponding value is its frequency. The output should resemble:

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

Counting Integer Values

If you require integer values instead of long values, use:

Map collect = wordsList.stream()
     .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(e -> 1)));

Sorting the Map by Value

To sort the map based on values in descending order, use:

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

This step returns a sorted LinkedHashMap where the keys represent the words, and the values represent their sorted frequencies.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3