java - 将相同元素连接成一个元素的 Java 函数式方法
问题描述
我想使用 Streams API 来处理通话记录并计算同一电话号码的总账单金额。这是使用混合方法实现它的代码,但我想使用全功能方法:
List<CallLog> callLogs = Arrays.stream(S.split("\n"))
.map(CallLog::new)
.sorted(Comparator.comparingInt(callLog -> callLog.phoneNumber))
.collect(Collectors.toList());
for (int i = 0; i< callLogs.size() -1 ;i++) {
if (callLogs.get(i).phoneNumber == callLogs.get(i+1).phoneNumber) {
callLogs.get(i).billing += callLogs.get(i+1).billing;
callLogs.remove(i+1);
}
}
解决方案
您可以使用Collectors.groupingByCallLog
按电话号码对对象进行分组,并使用Collectors.summingInt对分组元素的计费进行汇总
Map<Integer, Integer> likesPerType = Arrays.stream(S.split("\n"))
.map(CallLog::new)
.collect(Collectors.groupingBy(CallLog::getPhoneNumber, Collectors.summingInt(CallLog::getBilling)));
推荐阅读
- sql - 如何将多个表合并到一个表中,使列名成为行名?
- assembly - 使用 mips 交换奇偶位
- python - 如果调用者是 Google App Engine,如何仅在 Django 中运行 Google App Engine cronjobs?
- julia - 创建整数和缺失值的向量
- java - NAS 文件夹位置
- python - 为什么为每个模块设置日志级别不会在我的代码中显示日志?
- oracle - 根据跨日期范围对订单进行分组
- firebase - Firebase Cloud Functions 部署错误,错误代码为“NoSuchKey”
- reactjs - 如何使用消息挂钩将值推送到数组中
- json - 如何使用 Observable 从文件中获取 json 数据