计数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

回到顶部