如何获取列表中数字的频率
How to get the frequency of numbers in a list
我有一个包含五个数字的列表(一手牌)。我想获取列表中每个数字的频率,并将其放入地图或类似的东西中。
我知道自己实现这个很容易。但我很好奇,在 Collections 框架中有没有办法做到这一点?
(要清楚,不是任何特定数字的频率,而是列表中每个数字的频率。)
(Collections)中有一个方法[http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html] class called frequency
用法如下:
int occurrences = Collections.cards(animals, "1");
我很确定这是 JDK 1.6 updwards
试试这个
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(1);
list.add(1);
list.add(1);
list.add(2);
list.add(4);
list.add(1);
Set<Integer> set = new HashSet<Integer>(list);
for(Integer tmp:set)
{
System.out.println("frequency of element "+ tmp + " : " + Collections.frequency(list, tmp));
}
使用 Guava HashMultiset
,它内置了计数功能:
HashMultiset<String> set = HashMultiset.create(yourList);
int x = set.count("abc");
您还可以迭代并获取所有元素的计数:
for(Multiset.Entry<String> entry : set.entrySet()) {
System.out.println(entry.getElement() + " -> " + entry.getCount());
}
我有一个包含五个数字的列表(一手牌)。我想获取列表中每个数字的频率,并将其放入地图或类似的东西中。
我知道自己实现这个很容易。但我很好奇,在 Collections 框架中有没有办法做到这一点?
(要清楚,不是任何特定数字的频率,而是列表中每个数字的频率。)
(Collections)中有一个方法[http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html] class called frequency
用法如下:
int occurrences = Collections.cards(animals, "1");
我很确定这是 JDK 1.6 updwards
试试这个
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(1);
list.add(1);
list.add(1);
list.add(2);
list.add(4);
list.add(1);
Set<Integer> set = new HashSet<Integer>(list);
for(Integer tmp:set)
{
System.out.println("frequency of element "+ tmp + " : " + Collections.frequency(list, tmp));
}
使用 Guava HashMultiset
,它内置了计数功能:
HashMultiset<String> set = HashMultiset.create(yourList);
int x = set.count("abc");
您还可以迭代并获取所有元素的计数:
for(Multiset.Entry<String> entry : set.entrySet()) {
System.out.println(entry.getElement() + " -> " + entry.getCount());
}