使用Java8 Stream流操作 更改map里value的结构

Map<String,List<String>> 替换为Map<String,Java>

原数据结构如下:
Map<String,String> map=new LinkedMultiValueMap<>();
map.add("java","1.7");
map.add("java","1.8");
添加数据后map为:<String,List<String>>结构 相同key值 使用list收集value
现在想通过stream流操作,将:
Map<String,List<String>> map ---> Map<String,Java> map

Java结构如下:
public class Java{

private List<String> versions;

}



慕村9548890
浏览 11339回答 1
1回答

慕勒3428872

谢邀根据题主的描述,我感觉其实就是一个把map转化为map的过程,可以看到变化的只是有value而已,key没有变化,这里map也提供了一种变相来把map中数据转化为stream的方式,并没有直接map.stream()的方法以前map循环是用到map的entrySet,而这里的entrySet就是一个集合,也就可以用stream了Map<String,List<String>>&nbsp;map&nbsp;=&nbsp;new&nbsp;HashMap<>();map.put("java",&nbsp;Arrays.asList("1.7",&nbsp;"1.8"));map.entrySet().stream()此时流map.entrySet().stream()里的数据是Map.Entry<String,List<String>>,现在其实就是要把Map.Entry<String,List<String>>转化为Map<String,Java>,由于最后是要的结果是用map收集,所以只能collect(Collectors.toMap())了Map<String,&nbsp;Java>&nbsp;collect&nbsp;=&nbsp;map.entrySet().stream()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toMap(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stringListEntry&nbsp;->&nbsp;stringListEntry.getKey(),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stringListEntry&nbsp;->&nbsp;new&nbsp;Java(stringListEntry.getValue())));Collectors.toMap的两个参数的方法,第一个参数代表如何获取key,第二个代表如何获取value,因为key没有变,所以直接取entry的key,value的话要转化为Java对象,所以写了一个构造函数(简单的构造方法我就用lombok注解了)&nbsp;&nbsp;&nbsp;&nbsp;@Getter &nbsp;&nbsp;&nbsp;&nbsp;@Setter &nbsp;&nbsp;&nbsp;&nbsp;@AllArgsConstructor &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;class&nbsp;Java{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;List<String>&nbsp;versions; &nbsp;&nbsp;&nbsp;&nbsp;}差不多就是这样吧,仅供参考^_^
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5