计数Java集合中出现次数的优雅方法
给定具有可能重复项的对象的集合,我想最后对每个对象的出现次数进行计数。我通过初始化一个empty
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语言的功能持开放态度,该功能允许使用较短的代码。
回答:
查看Guava的Multiset。几乎正是您要寻找的东西。
不幸的是,它没有addAll(Iterable iterable)函数,但是在集合上调用add(E e)进行简单循环很容易。
我的错,它确实有一个addAll方法-因为必须实现,因为它实现了Collection。
以上是 计数Java集合中出现次数的优雅方法 的全部内容, 来源链接: utcz.com/qa/404136.html