java HashMap组成的list,相同数据合并

高大锤 2017-01-04 05:52:26

将第一列中相同的value合并,然后第二列对应的数据组成list ,组成一个新的list。现在没有思路
...全文
618 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
就路过看一下 2017-01-06
  • 打赏
  • 举报
回复
没测试过,大致思路是这样子的,不知道相比你的是不是复杂一些 ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); TreeSet<String> set = new TreeSet<String>(); for (HashMap<String, String> map : list) { set.add(map.get("LinkFK")); map.put("EqutFk", map.get("EqutFk").substring(8)); } List<List<HashMap<String, Object>>> l = new ArrayList<List<HashMap<String, Object>>>(); for (String s : set) { List<HashMap<String, Object>> ll = new ArrayList<HashMap<String, Object>>(); HashMap<String, Object> m = new HashMap<String, Object>(); m.put("LinkFK", s); ll.add(m); l.add(ll); } for (List<HashMap<String, Object>> ll : l) { for (HashMap<String, String> map : list) { if (ll.get(0).get("LinkFK").equals(map.get("LinkFK"))) { HashMap<String, Object> mm = new HashMap<String, Object>(); mm.put("EqutFk", map.get("EqutFk")); ll.add(mm); } } } System.out.println(ll);
ryuugu_rena 2017-01-06
  • 打赏
  • 举报
回复
单层循环判断,有相同的value就删除,得到的就是想要的结果。
ralpher2017 2017-01-06
  • 打赏
  • 举报
回复
重新提交一下:)

     Map<String,List<String>> mapReduce(Map<String,String> sourceMap){
		Map<String,List<String>> result = new HashMap<String,List<String>>();
		sourceMap.forEach((key,value)->{
			if(result.containsKey(key)){
				result.get(key).add(value);
			}else{
				result.put(key, Arrays.asList(value));
			}
		});
		return result;
	}
ralpher2017 2017-01-06
  • 打赏
  • 举报
回复
Map<String,List<String>> mapReduce(Map<String,String> sourceMap){ Map<String,List<String>> result = new HashMap<String,List<String>>(); sourceMap.forEach((key,value)->{ if(result.containsKey(key)){ result.get(key).add(value); }else{ result.put(key, Arrays.asList(value)); } }); return result; }
高大锤 2017-01-05
  • 打赏
  • 举报
回复
引用 4 楼 a276202031 的回复:
[quote=引用 3 楼 a276202031 的回复:]

List<HashMap> list2=new ArrayList<HashMap>();
for(HashMap mp:list){
  for(HashMap mp2:list){
       if(mp.get("LineFK").equals(mp2.get("LineFK"))){
             List ls=(ArrayList)mp2.get("EqutFK");
             ls.add(mp.get("EqutFK"));
        }else{
           HashMap  mp3=new HashMap ();
           List ls=new ArrayList();
          ls.add(mp.get("EqutFK"));
          mp3.put(mp.get("LineFK"),ls);
           list2.add(mp3);
    }
   }
}
嵌套写错了 刚才没注意 [/quote] 是一对多的关系,1113100对应的第二列数据组成list,最后需要组合成[{"LineFk":"1113100","info":[{"EqutFk":"A-01"},{"EqutFk":"A-02"}]},{...}]这样的数据格式。 已经搞出来了 可是代码有点啰嗦,看看有没有更好的写法
浮云若水 2017-01-05
  • 打赏
  • 举报
回复
引用 3 楼 a276202031 的回复:

List<HashMap> list2=new ArrayList<HashMap>();
for(HashMap mp:list){
  for(HashMap mp2:list){
       if(mp.get("LineFK").equals(mp2.get("LineFK"))){
             List ls=(ArrayList)mp2.get("EqutFK");
             ls.add(mp.get("EqutFK"));
        }else{
           HashMap  mp3=new HashMap ();
           List ls=new ArrayList();
          ls.add(mp.get("EqutFK"));
          mp3.put(mp.get("LineFK"),ls);
           list2.add(mp3);
    }
   }
}
嵌套写错了 刚才没注意
浮云若水 2017-01-05
  • 打赏
  • 举报
回复

List<HashMap> list2=new ArrayList<HashMap>();
for(HashMap mp:list){
  for(HashMap mp2:list){
       if(mp.get("LineFK").equals(mp2.get("LineFK"))){
             List ls=(ArrayList)mp2.get("EqutFK");
             ls.add(mp.get("EqutFK"));
        }else{
           HashMap  mp3=new HashMap ();
           List ls=new ArrayList();
          ls.add(mp.get("EqutFK"));
          mp3.put(mp.get("LineFK"),ls);
           list2.add(mp3);
    }
   }
}
浮云若水 2017-01-05
  • 打赏
  • 举报
回复
循环不就得了? 按你的需求做if判断
  • 打赏
  • 举报
回复
循环合并呗。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧