Java count occurrence of each item in an array
With java-8, you can do it like this:
String[] array = {"name1","name2","name3","name4", "name5", "name2"};Arrays.stream(array) .collect(Collectors.groupingBy(s -> s)) .forEach((k, v) -> System.out.println(k+" "+v.size()));
Output:
name5 1name4 1name3 1name2 2name1 1
What it does is:
- Create a
Stream<String>
from the original array - Group each element by identity, resulting in a
Map<String, List<String>>
- For each key value pair, print the key and the size of the list
If you want to get a Map
that contains the number of occurences for each word, it can be done doing:
Map<String, Long> map = Arrays.stream(array) .collect(Collectors.groupingBy(s -> s, Collectors.counting()));
For more informations:
Hope it helps! :)
You could use a MultiSet
from Google Collections/Guava or a Bag
from Apache Commons.
If you have a collection instead of an array, you can use addAll()
to add the entire contents to the above data structure, and then apply the count()
method to each value. A SortedMultiSet
or SortedBag
would give you the items in a defined order.
Google Collections actually has very convenient ways of going from arrays to a SortedMultiset
.