Java 8 steam 分组并计算字段值

ansee.z安子博 2020-07-17 11:51:42
数据:[{"a":"1","b":"2","c":"3"},{"a":"2","b":"4","c":"5"},,{"a":"1","b":"4","c":"5"}]
按每个对象a分组,并按bc乘除
最后结果:[{"1":["a":"1","b":"2*4/2","c":"3*5/2"]}{"2":["a":"2","b":"4","c":"5"]}]
...全文
10548 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 RockeyCui 的回复:
哥们,你这发了几个帖子,一直不结贴,小心以后没人回答你问题了,哈哈哈。
楼主白嫖
RockeyCui 2020-07-21
  • 打赏
  • 举报
回复
哥们,你这发了几个帖子,一直不结贴,小心以后没人回答你问题了,哈哈哈。
RockeyCui 2020-07-17
  • 打赏
  • 举报
回复
        String json = "[{\"a\":\"1\",\"b\":\"2\",\"c\":\"3\"},{\"a\":\"2\",\"b\":\"4\",\"c\":\"5\"},,{\"a\":\"1\",\"b\":\"4\",\"c\":\"5\"}]";

List<HashMap> list = JSON.parseArray(json, HashMap.class);

Map<String, HashMap> collect = list.stream()
.collect(
Collectors.groupingBy(
new Function<HashMap, String>() {
@Override
public String apply(HashMap map) {
return (String) map.get("a");
}
},
Collectors.reducing(new HashMap<>(), new BinaryOperator<HashMap>() {
@Override
public HashMap apply(HashMap t, HashMap t2) {
if (t.get("a") == null) {
t = t2;
} else {
t.put("b", (Integer.valueOf((String) t.get("b")) * Integer.valueOf((String) t2.get("b"))) / 2);
t.put("c", (Integer.valueOf((String) t.get("c")) * Integer.valueOf((String) t2.get("c"))) / 2);
}
return t;
}
}))
);
一个帅逼 2020-07-17
  • 打赏
  • 举报
回复
Collectors.toMap应该可以解决,在mergeFunction中处理b,c值

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧