一、描述
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]