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!