java – 将地图转换为地图>
发布时间:2020-12-14 05:28:27 所属栏目:Java 来源:网络整理
导读:我有地图如下 MapString,String values = new HashMapString,String();values.put("aa","20");values.put("bb","30");values.put("cc","20");values.put("dd","45");values.put("ee","35");values.put("ff","35");values.put("gg","20"); 我想以Map String,L
我有地图如下
Map<String,String> values = new HashMap<String,String>(); values.put("aa","20"); values.put("bb","30"); values.put("cc","20"); values.put("dd","45"); values.put("ee","35"); values.put("ff","35"); values.put("gg","20"); 我想以Map< String,List< String>>的格式创建新的地图.,样品输出将为 "20" -> ["aa","cc","gg"] "30" -> ["bb"] "35" -> ["ee","ff"] "45" -> ["dd"] 我可以通过实体迭代来做 Map<String,List<String>> output = new HashMap<String,List<String>>(); for(Map.Entry<String,String> entry : values.entrySet()) { if(output.containsKey(entry.getValue())){ output.get(entry.getValue()).add(entry.getKey()); }else{ List<String> list = new ArrayList<String>(); list.add(entry.getKey()); output.put(entry.getValue(),list); } } 使用流可以做得更好吗? 解决方法
groupingBy可以用于按键分组.如果在没有映射收集器的情况下使用,则将映射条目流(Stream< Map.Entry< String,String>)转换为Map< String,List< Map.Entry< String,String>>接近你想要的,但不完全.
为了将输出Map的值作为原始键的列表,必须将映射收集器链接到groupingBy Collector. Map<String,List<String>> output = values.entrySet() .stream() .collect(Collectors.groupingBy(Map.Entry::getValue,Collectors.mapping(Map.Entry::getKey,Collectors.toList()))); System.out.println (output); 输出: {45=[dd],35=[ee,ff],30=[bb],20=[aa,cc,gg]} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |