Word Frequency Count in Java 8 Using Streams
Counting the frequency of words within a list is a common task in text processing. In Java 8, this can be achieved efficiently using the Collectors.groupingBy() and Collectors.counting() methods.
To find the word frequency in a list of strings, you can use the following steps:
For example, given the following list of words:
List<String> wordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");
You can calculate the word frequencies as follows:
Map<String,Long> wordFrequencies = wordsList.stream() .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
This will produce a map with the word frequencies, where the keys are the words and the values are the number of occurrences. The result for the given list would be:
{ciao=2, hello=1, bye=2}
To sort the map by values, you can use LinkedHashMap and the entrySet() method to collect the map entries into a stream. Then, use sorted() to sort the entries by value in descending order and Collectors.toMap() to collect them into a new 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 ));
This will produce a sorted map where the words are ordered by their frequency.
The above is the detailed content of How to Count Word Frequencies in Java 8 Using Streams?. For more information, please follow other related articles on the PHP Chinese website!