Java count occurrence of each item in an array Java count occurrence of each item in an array arrays arrays

Java count occurrence of each item in an array


List asList = Arrays.asList(array);Set<String> mySet = new HashSet<String>(asList);for(String s: mySet){ System.out.println(s + " " + Collections.frequency(asList,s));}


With , 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.