java以元素频率顺序遍历多集的最简单方法?
考虑这个例子,打印出一些设备类型统计信息。(“DeviceType”是具有dozenish值的枚举。)
Multiset<DeviceType> histogram = getDeviceStats();
for (DeviceType type : histogram.elementSet()) {
System.out.println(type + ": " + histogram.count(type));
}
按频率顺序打印不同元素的最简单、最优雅的方法是什么(最常见的类型优先)
快速查看一下^{Multiset
实现(HashMultiset
,TreeMultiset
等)似乎也没有自动保持元素的频率顺序
# 1 楼答案
我刚刚在番石榴中添加了这个特性,请参见here了解Javadoc
编辑:根据原始问题
Multisets.copyHighestCountFirst()
的用法示例:# 2 楼答案
使用ForwardingMultiSet的实现:
(EntryComp来自seanizer'sanswer)
# 3 楼答案
下面是一个返回
List
条目的方法,按频率排序(更新:使用一个标志切换升序/降序,并使用番石榴最喜欢的玩具:Enum Singleton Pattern
,如Effective Java,第3项所示):测试代码:
输出:
# 4 楼答案
因为it is not yet implemented,我想你可以创建一个
Map
,key=type,value=count。然后对地图进行排序——参见here