为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕村9548890 2018-11-19 16:34:42
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> mapJava结构如下:public class Java{private List<String> versions;}
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

谢邀

根据题主的描述,我感觉其实就是一个把map转化为map的过程,可以看到变化的只是有value而已,key没有变化,这里map也提供了一种变相来把map中数据转化为stream的方式,并没有直接map.stream()的方法

以前map循环是用到mapentrySet,而这里的entrySet就是一个集合,也就可以用stream

Map<String,List<String>> map = new HashMap<>();map.put("java", Arrays.asList("1.7", "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, Java> collect = map.entrySet().stream()                .collect(Collectors.toMap(                        stringListEntry -> stringListEntry.getKey(), 
                        stringListEntry -> new Java(stringListEntry.getValue())));

Collectors.toMap的两个参数的方法,第一个参数代表如何获取key,第二个代表如何获取value,因为key没有变,所以直接取entry的key,value的话要转化为Java对象,所以写了一个构造函数(简单的构造方法我就用lombok注解了)

    @Getter
    @Setter
    @AllArgsConstructor
    public static class Java{
        private List<String> versions;
    }

差不多就是这样吧,仅供参考^_^


查看完整回答
反对 回复 2018-11-19
  • 1 回答
  • 0 关注
  • 11239 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信