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

怎么使用java8的stream合并HashMap的所有value为一个List,value的类型为Stack

怎么使用java8的stream合并HashMap的所有value为一个List,value的类型为Stack

料青山看我应如是 2019-05-25 15:24:36
怎么使用java8的stream合并HashMap的所有value为一个List,value的类型为Stackmap=newHashMap;要求把map的value合并成List,并使用java8的stream方法操作Stack是java自带的容器,在这里完全可以看成是ArrayList
查看完整描述

2 回答

?
BIG阳

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

在写stream的时候,一定要心里非常清楚当前stream中到底是什么元素,这样你才能结合map,filter,peek等方法来转化你的数据
首先开始的时候还没有stream,数据源是一个map,把map转化为stream,我还是建议使用entryset的方式
//此时stream里的元素是Map.Entry>
map.entrySet().stream()
题主是想要Entry里面的value,也就是Stack,那就要把Map.Entry>转化为Stack,那这里肯定要用map操作啦
//此时stream里的元素是Stack
map.entrySet().stream().map(Map.Entry::getValue)
拿到了Stack的stream还不够,看题主的意思,是想取出Stack中的一个String的属性或者一个计算出来的值,那就是要把Stack转化为String,根据题主的信息,这个Stack其实就是java.util.Stack,那这个也相当于是一个集合了,集合都会有都可以变成stream的,由于需要集合里的string对象,那就相当于要把这个Stack集合压平,压平的话,那就肯定要用flatmap啦
Listcollect=map.entrySet().stream()
.map(Map.Entry::getValue)
.flatmap(Stack::stream)
.collect(Collectors.toList());
这样就完整啦,当然map中我用的是方法引用,觉得这么写更直观一点,可以看得到当前stream里到底是啥类型元素,你也可以写成lamdba的形式啦
                            
查看完整回答
反对 回复 2019-05-25
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

map.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList())
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 4766 浏览
慕课专栏
更多

添加回答

举报

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