java实现:将N个不同的球放入M个盒子(不轮空)

一、描述
N个不同的球放入M个不同的盒子(不轮空),每个盒子会有多少个球。
二、实现逻辑

/** 逻辑:N个不同的球放入M个盒子(不轮空),每个盒子会有多个球。 * 1.创建map,将球作为key,盒子作为value,先拿到球在哪个盒子的List<Map<String, String>>集合, * 2.将集合拆为HashMap<String, List>,新建map,key为盒子号,value为球的集合 * 3.结果:key= box3,value= [球3, 球6, 球9] * key= box1,value= [球1, 球4, 球7, 球10] * key= box2,value= [球2, 球5, 球8, 球11] * */

三、具体代码实现

public static HashMap<String, List> getBallInBoxs(List<String> ballList, List<String> boxList) { 
        List<Map<String, String>> listEnd = new ArrayList<>();
        /** 逻辑:N个不同的球放入M个盒子(不轮空),每个盒子会有多个球。 * 1.创建map,将球作为key,盒子作为value,先拿到球在哪个盒子的List<Map<String, String>>集合, * 2.将集合拆为HashMap<String, List>,新建map,key为盒子号,value为球的集合 * 3.结果:key= box3,value= [球3, 球6, 球9] * key= box1,value= [球1, 球4, 球7, 球10] * key= box2,value= [球2, 球5, 球8, 球11] * */
        for (int i = 0; i < ballList.size(); i++) { 
            for (int j = 0; j < boxList.size(); j++) { 
                HashMap<String, String> map = new HashMap<>();
                map.put(boxList.get(j), ballList.get(i));
                listEnd.add(map);
                i += 1;
                if (i == ballList.size()) { 
                    break;
                }
            }
            i = i - 1;

        }
        HashMap<String, List> mapEnd = new HashMap<>();
        for (String box : boxList) { 
            List<String> list = new ArrayList<>();
            listEnd.stream().forEach(mapnew -> { 
                for (Map.Entry<String, String> m : mapnew.entrySet()) { 
                    if (m.getKey().equals(box)) { 
                        list.add(m.getValue());
                        mapEnd.put(box, list);
                    }
                }
            });
        }
        return mapEnd;

    }

四、代码测试

List<String> ballList = new ArrayList<>();
        ballList.add("球1");
        ballList.add("球2");
        ballList.add("球3");
        ballList.add("球4");
        ballList.add("球5");
        ballList.add("球6");
        ballList.add("球7");
        ballList.add("球8");
        ballList.add("球9");
        ballList.add("球10");
        ballList.add("球11");
        List<String> boxList = new ArrayList<>();
        boxList.add("room1");
        boxList.add("room2");
        boxList.add("room3");
        HashMap<String, List> map = getBallInBoxs( ballList, boxList);

        for (Map.Entry<String, List> m : map.entrySet()) { 
            System.out.println("key= " + m.getKey() + ",value= " + m.getValue().toString());
        }

五、输出结果

key= box3,value= [3,6,9]
key= box1,value= [1,4,7,10]
key= box2,value= [2,5,8,11]
    原文作者:嘿我可不认输
    原文地址: https://blog.csdn.net/weixin_44370043/article/details/124329482
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞