Учитывая коллекцию объектов с возможными дубликатами, я бы хотел получить число вхождений на объект. Я делаю это, инициализируя пустой Map
, затем повторяя через Collection
и сопоставляя объект с его счетчиком (увеличивая счет каждый раз, когда карта уже содержит объект).
public Map<Object, Integer> countOccurrences(Collection<Object> list){
Map<Object, Integer> occurrenceMap = new HashMap<Object, Integer>();
for(Object obj: list){
Integer numOccurrence = occurrenceMap.get(obj);
if(numOccurrence == null){
//first count
occurrenceMap.put(obj, 1);
} else{
occurrenceMap.put(obj, numOccurrence++);
}
}
return occurrenceMap;
}
Это выглядит слишком много для простой логики подсчета вхождений. Есть ли более элегантный/более короткий способ сделать это? Я открыт для совершенно другого алгоритма или специфичной для Java функции, которая позволяет использовать более короткий код.