我想List<E>从使用Map<String, List<E>>(E是一个随机类)中提取一个stream()。我想要一个使用Java 8流的简单的单行方法。到目前为止,我一直在尝试:HashMap<String,List<E>> map = new HashMap<>();List<E> list = map.values(); // does not compilelist = map.values().stream().collect(Collectors.toList()); // does not compile
3 回答
![?](http://img1.sycdn.imooc.com/5333a2320001acdd02000200-100-100.jpg)
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
map.values()返回一个Collection<List<E>>not List<E>,如果需要后者,则需要按以下步骤将嵌套拼合List<E>为单个List<E>:
List<E> result = map.values()
.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
![?](http://img1.sycdn.imooc.com/545868190001d52602200220-100-100.jpg)
当年话下
TA贡献1890条经验 获得超9个赞
或使用 forEach
map.forEach((k,v)->list.addAll(v));
或如Aomine所评论使用的
map.values().forEach(list::addAll);
![?](http://img1.sycdn.imooc.com/533e50ed0001cc5b02000200-100-100.jpg)
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
这是使用Java-9及更高版本的替代方法:
List<E> result = map.values()
.stream()
.collect(Collectors.flatMapping(List::stream, Collectors.toList()));
添加回答
举报
0/150
提交
取消