【发布时间】:2012-12-24 23:18:11
【问题描述】:
给定一个可能重复的对象集合,我希望得到每个对象的出现次数。我通过初始化一个空的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 语言特定功能持开放态度。
【问题讨论】:
-
计算出现次数毕竟不是那么简单,你的代码似乎是你能做的最好的。
-
为了获得所有元素出现的完整列表,您必须遍历整个集合,我认为您的实现是一个不错的实现。
-
是什么让你觉得这很冗长?对我来说看起来很清楚。这就是 Java 的样子。
-
@DariuszWawer 无论如何都是一次迭代,排序不会;在这里没有区别。
-
这段代码有错误。在
else语句中应该是++numOccurrence,否则我们会用1 覆盖出现次数。
标签: java dictionary collections count