java - 计算具有相同值的对象的频率数
问题描述
例如我有一个列表:
ArrayList<Observer> arrlist = new ArrayList<Observer>();
该列表包含观察者对象,但我想知道具有相同值的对象的频率,例如字符串名称
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);
}
推荐阅读
- apache-kafka - 在本地运行我的 Kafka 消费者时,它只消耗了一半的消息
- java - Spingboot Websocket Stomp
- excel - 将 PPT 文件名保存在 Excel 列中的值
- android - 如何通过 React Native 访问现有 Android 项目的 Native 数据库
- apache-pig - 根据 Pig Script 中的 sum 查找 5 个热门热门
- pandas - 将数据帧的行转换为单独的数据帧
- visual-studio - 增加 MSVC 的编译器堆栈大小
- python - 安全组入口规则自动清除
- windows-10 - “minikube”集群不存在
- java - 健康检查 Redis 服务器