Home >Java >javaTutorial >How can I efficiently count word frequency in a list using 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.
The Stream API in Java 8 provides an elegant solution for word frequency counting. To begin, create a list of words:
List<String> wordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");
The core logic involves grouping the words by their identity and counting the occurrences:
Map<String, Long> 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<String, Integer> collect = wordsList.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(e -> 1)));
To sort the map based on values in descending order, use:
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 ));
This step returns a sorted LinkedHashMap where the keys represent the words, and the values represent their sorted frequencies.
The above is the detailed content of How can I efficiently count word frequency in a list using Java 8?. For more information, please follow other related articles on the PHP Chinese website!