for循环,list中实现一对多

浪尽此生 提交于 2019-12-14 03:42:21

该问题即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);
		
	}

可以参考下。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!