计数具有相同值的对象的频率

  • 本文关键字:对象 频率 java oop
  • 更新时间 :
  • 英文 :


例如,我有一个列表:

ArrayList<Observer> arrlist = new ArrayList<Observer>();

该列表包含观察者对象但我想知道具有相同值的对象的频率,例如String-name

public class  Observer{
private String name;
}

我该怎么做?

您基本上需要对观察者进行迭代,并计算每个键的出现次数(根据需要,可以是单个属性或组合(。

以密钥为Observer.name为例,您可以执行以下操作:

Map<String, List<Observer>> observersByName = 
arrlist.stream().collect(Collectors.groupingBy(Observer::getName));

然后对条目集进行迭代,并在值列表上调用size()以获得频率。

如果您直接想获得频率,请添加counting()收集器:

Map<String, Long> nameFrequency = arrlist.stream().collect(
Collectors.groupingBy(Observer::getName,
Collectors.counting()));

如果你想在不使用流的情况下获得频率,你可以使用Map.merge()方法:

Map<String, Integer> nameFrequency = new HashMap<>();
for( Observer obs : arrlist ) {
//use the name as the key, associate a value of 1 with each key
//if an entry already existed merge existing and new value by summing them
frequency.merge( obs.getName(), 1, Integer::sum);
}

最新更新