qq_25181511 2022-06-16 15:57 采纳率: 100%
浏览 90
已结题

如何对List对象内的内容进行分组,分组后转为Map方便操作

问题遇到的现象和发生背景

关于对List求得分组的问题,如何对List对象内的内容进行分组,分组后转为Map方便操作

问题相关

大概数据结构是这样的
数据行:
第一行:行号10,存货001,MS行号01;
第二行:行号10,存货001,MS行号02;
第三行:行号10,存货001,MS行号03;
第四行:行号20,存货002,MS行号04;
第五行:行号30,存货003,MS行号05;
第六行:行号30,存货003,MS行号06;
第七行:行号40,存货004,MS行号07;

模拟对象代码,暂时用map代替了:

List<Map<String,String>> list = new ArrayList<>();
        Map<String,String> map1 = new HashMap<>();
        map1.put("lineNo", "10");
        map1.put("suid", "001");
        map1.put("ms", "01");
        list.add(map1);
        Map<String,String> map2= new HashMap<>();
        map2.put("lineNo", "10");
        map2.put("suid", "001");
        map2.put("ms", "02");
        list.add(map2);
        Map<String,String> map3= new HashMap<>();
        map3.put("lineNo", "10");
        map3.put("suid", "001");
        map3.put("ms", "03");
        list.add(map3);
        Map<String,String> map4= new HashMap<>();
        map4.put("lineNo", "20");
        map4.put("suid", "002");
        map4.put("ms", "04");
        list.add(map4);
        Map<String,String> map5= new HashMap<>();
        map5.put("lineNo", "30");
        map5.put("suid", "003");
        map5.put("ms", "05");
        list.add(map5);
        Map<String,String> map6= new HashMap<>();
        map6.put("lineNo", "30");
        map6.put("suid", "003");
        map6.put("ms", "06");
        list.add(map6);
        Map<String,String> map7= new HashMap<>();
        map7.put("lineNo", "40");
        map7.put("suid", "004");
        map7.put("ms", "07");
        list.add(map7);

我的解答思路和尝试过的方法

由于客户环境是JDK1.7的,我想不到好的解决办法,希望帮个忙解答一下。

我想要达到的结果

我希望将以上数据行分组后转为以下结构,方便我对分组后的内容进行操作。

Map<行号+存货,List<数据行>> map = new HashMap<String , List<数据行>>();
Map<String, List<Map<String,String>>> map = new HashMap<>();
  • 写回答

3条回答 默认 最新

  • sinJack 2022-06-16 16:04
    关注

    jdk1.7的话,那遍历判断,创建map节点就行了。

    import java.util.*;
    public class Test {
        public static void main(String[] args) {
            Map<String, List<Map<String,String>>> map = new HashMap<>();
            List<Map<String,String>> list = new ArrayList<>();
            Map<String,String> map1 = new HashMap<>();
            map1.put("lineNo", "10");
            map1.put("suid", "001");
            map1.put("ms", "01");
            list.add(map1);
            Map<String,String> map2= new HashMap<>();
            map2.put("lineNo", "10");
            map2.put("suid", "001");
            map2.put("ms", "02");
            list.add(map2);
            Map<String,String> map3= new HashMap<>();
            map3.put("lineNo", "10");
            map3.put("suid", "001");
            map3.put("ms", "03");
            list.add(map3);
            Map<String,String> map4= new HashMap<>();
            map4.put("lineNo", "20");
            map4.put("suid", "002");
            map4.put("ms", "04");
            list.add(map4);
            Map<String,String> map5= new HashMap<>();
            map5.put("lineNo", "30");
            map5.put("suid", "003");
            map5.put("ms", "05");
            list.add(map5);
            Map<String,String> map6= new HashMap<>();
            map6.put("lineNo", "30");
            map6.put("suid", "003");
            map6.put("ms", "06");
            list.add(map6);
            Map<String,String> map7= new HashMap<>();
            map7.put("lineNo", "40");
            map7.put("suid", "004");
            map7.put("ms", "07");
            list.add(map7);
    
            for(Map<String,String> m:list){
                String key=m.get("lineNo")+m.get("suid");
                if (map.containsKey(key)){
                    map.get(key).add(m);
                }else{
                    List<Map<String, String>> mp=new ArrayList<>();
                    mp.add(m);
                    map.put(key,mp);
                }
            }
            System.out.println(map);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月24日
  • 已采纳回答 6月16日
  • 修改了问题 6月16日
  • 修改了问题 6月16日
  • 展开全部

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么