shallow丶十三 2021-04-07 14:56 采纳率: 40%
浏览 50
已结题

怎么将数组多个对象的某个属性分组成下面那样的需求(java的处理方式)

原始数据处理后的样子是这样的,跟我需求还是不太一样,所以来请求帮助。

[{"partCode": "1111", "Price": "5000", "userName": "电脑"},{"partCode": "2222", "Price": "4000", "userName": "手机"},{"partCode": "3333", "Price": "2500", "userName": "手表"},{"partCode": "1111", "Price": "255", "userName": "耳机"},{"partCode": "1111", "Price": "550", "userName": "键盘"},{"partCode": "1111", "Price": "165", "userName": "鼠标"},{"partCode": "2222", "Price": "155", "userName": "耳机"},{"partCode": "3333", "Price": "50", "userName": "表带"},{"partCode": "2222", "Price": "35", "userName": "充电器"}]

然后需要处理成这样

[{"partCode": "1111","电脑":"5000“,"耳机":"255","键盘":"550","鼠标":"165"},{"partCode": "2222","手机":"4000","耳机":"155","充电器":"35"},{"partCode": "3333","手表":"2500","表带":"50"}]

  • 写回答

2条回答 默认 最新

  • 张小帅和刘美美 2021-04-07 15:32
    关注
    
    import com.alibaba.fastjson.JSON;
    import com.google.common.collect.Maps;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    
    public class Demo2 {
        public static void main(String[] args) {
            String jsonStr = "[{\"partCode\": \"1111\", \"Price\": \"5000\", \"userName\": \"电脑\"},{\"partCode\": \"2222\", \"Price\": \"4000\", \"userName\": \"手机\"},{\"partCode\": \"3333\", \"Price\": \"2500\", \"userName\": \"手表\"},{\"partCode\": \"1111\", \"Price\": \"255\", \"userName\": \"耳机\"},{\"partCode\": \"1111\", \"Price\": \"550\", \"userName\": \"键盘\"},{\"partCode\": \"1111\", \"Price\": \"165\", \"userName\": \"鼠标\"},{\"partCode\": \"2222\", \"Price\": \"155\", \"userName\": \"耳机\"},{\"partCode\": \"3333\", \"Price\": \"50\", \"userName\": \"表带\"},{\"partCode\": \"2222\", \"Price\": \"35\", \"userName\": \"充电器\"}]";
            List<Map<String, Object>> beforeDataList = JSON.parseObject(jsonStr, List.class);
    
            // 按照 partCode 分组
            Map<String, List<Map<String, Object>>> groupByPartCodeList = beforeDataList.stream()
                    .collect(Collectors.groupingBy(temp -> temp.get("partCode").toString()));
    
            // 遍历
            List<Map<String, Object>> afterDataList = groupByPartCodeList.entrySet().stream().map(temp -> {
                // Map<String, Object> afterDataMap = new HashMap<>();
                Map<String, Object> afterDataMap = Maps.newHashMap();
                afterDataMap.put("partCode", temp.getKey());
                temp.getValue().stream().forEach(temp2 -> afterDataMap.put(temp2.get("userName").toString(), temp2.get("Price").toString()));
                return afterDataMap;
            }).collect(Collectors.toList());
    
            System.out.println(afterDataList);
        }
    }
    
    [{手表=2500, partCode=3333, 表带=50}, {手机=4000, 充电器=35, 耳机=155, partCode=2222}, {电脑=5000, 鼠标=165, 耳机=255, 键盘=550, partCode=1111}]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP