该问题即List的集合数据处理问题,希望把相同的数据放到一起,是一种归类操作,也就是说其实总得需要把List形式转化为Map<Integer, List>的形式。
这种形式map的key也就是当前的这个数字,而这个value就是这个数字对应的所有当前出现此key的集合。
一个简单例子:
List<Integer> list = Arrays.asList(1, 1, 2, 3, 4, 2, 1);
Map<Integer, List<Integer>> map = new HashMap<>();
for (Integer num : list){
// map是否包含此key,若已经包含则添加一个新的数字到对应value集合中
if (map.containsKey(num)){
map.get(num).add(num);
}else{
// map不包含此key,则重新创建一个新集合,并把这个数字添加进集合
// ,再把集合放到map中
List<Integer> newList = new ArrayList<>();
newList.add(num);
map.put(num, newList);
}
}
System.out.println(map);
运行结果:
{1=[1,1,1], 2=[2,2], 3=[3, 4=[4]}
下面是我的一个工程“灰度发布”里用到的例子:
public ResultBean listDunitCtrl() throws Exception {
List<ListDunitDO> lists2 = iGraysplitService.listDunitName();
Map<String, Object> map = new HashMap<String, Object>();
for (ListDunitDO str : lists2) {
String spid = str.getDunitName();
String sysName = str.getSubSysEnNameId();
String denv = str.getDenv();
if (map.containsKey(sysName)) {
List<String> list = (List<String>) map.get(sysName);
list.add(spid);
} else {
List<String> newList = new ArrayList<>();
newList.add(spid);
map.put(sysName, newList);
}
}
System.out.println(map);
Map<String, Object> responseMap = new HashMap<String, Object>();
responseMap.put("data", map);
return ResultBean.success(responseMap);
}
可以参考下。
来源:CSDN
作者:努力努力再努力V
链接:https://blog.csdn.net/yym_cs666/article/details/103469962