Вопрос-ответ

Java count occurrence of each item in an array

Java подсчитывает вхождение каждого элемента в массив

Существует ли какой-либо метод для подсчета вхождения каждого элемента в массив?

Допустим, у меня есть:

String[] array = {"name1","name2","name3","name4", "name5"};

Здесь результатом будет:

name1 1
name2 1
name3 1
name4 1
name5 1

и если у меня есть:

String[] array = {"name1","name1","name2","name2", "name2"};

Результатом будет:

name1 2
name2 3

Вывод здесь просто для демонстрации ожидаемого результата.

Переведено автоматически
Ответ 1
List asList = Arrays.asList(array);
Set<String> mySet = new HashSet<String>(asList);

for(String s: mySet){
System.out.println(s + " " + Collections.frequency(asList,s));
}
Ответ 2

С вы можете сделать это следующим образом:

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()));

Вывод:

name5 1
name4 1
name3 1
name2 2
name1 1

Что это делает, так это:


  • Создайте Stream<String> из исходного массива

  • Группирует каждый элемент по идентификатору, в результате чего Map<String, List<String>>

  • Для каждой пары ключ-значение выведите ключ и размер списка

Если вы хотите получить Map который содержит количество вхождений для каждого слова, это можно сделать, выполнив:

Map<String, Long> map = Arrays.stream(array)
.collect(Collectors.groupingBy(s -> s, Collectors.counting()));

Для получения дополнительной информации:

Надеюсь, это поможет! :)

Ответ 3

Вы могли бы использовать a MultiSet из Google Collections / Guava или a Bag из Apache Commons.

Если у вас есть коллекция вместо массива, вы можете использовать addAll() для добавления всего содержимого в приведенную выше структуру данных, а затем применить count() метод к каждому значению. A SortedMultiSet или SortedBag предоставит вам элементы в определенном порядке.

В Google Коллекциях на самом деле есть очень удобные способы перехода от массивов к a SortedMultiset.

Ответ 4

Используя HashMap, это прогулка по парку.

main(){
String[] array ={"a","ab","a","abc","abc","a","ab","ab","a"};
Map<String,Integer> hm = new HashMap();

for(String x:array){

if(!hm.containsKey(x)){
hm.put(x,1);
}else{
hm.put(x, hm.get(x)+1);
}
}
System.out.println(hm);
}
java arrays