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

java8 flatmap

java8 flatmap

Helenr 2018-09-04 17:38:41
java8 stream 的 flatmap 跟map有啥区别?有例子不
查看完整描述

2 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

比如一个List<?>,map能够直接操作list中的每个对象

List<Integer> integers = new ArrayList<>();
//添加数据略
integers.stream.map(i -> i + 1).foreach(System.out::println);

而使用flatmap使我们能够操作更深一层的数据,如下:
List<List<?>>


List<List<Integer>> outer = new ArrayList<>();

List<Integer> inner1 = new ArrayList<>();

inner1.add(1);

List<Integer> inner2 = new ArrayList<>();

inner1.add(2);

List<Integer> inner3 = new ArrayList<>();

inner1.add(3);

List<Integer> inner4 = new ArrayList<>();

inner1.add(4);

List<Integer> inner5 = new ArrayList<>();

inner1.add(5);

outer.add(inner1);

outer.add(inner2);

outer.add(inner3);

outer.add(inner4);

outer.add(inner5);

List<Integer> result = outer.stream().flatMap(inner -> inner.stream().map(i -> i + 1)).collect(toList());

System.out.println(result);


查看完整回答
3 反对 回复 2018-09-16
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

flatmap可以在lamda中返回集合,然后flat为单个元素一个个放入最后的结果集中。
比如Person里头有个多个Hobby(List<Hobby>),那我想获取所有人的所有hobby,则可以:
List<Person> persons = ...
Set<Hobby> hobbySet = persons.parallelStream().flatMap(p -> p.getHobbyList.stream())
.collect(Collectors.toCollection(() -> new TreeSet<Hobby>(
(h1,h2) -> h1.getName().compareTo(h2.getName())
)))

查看完整回答
1 反对 回复 2018-09-16
  • 2 回答
  • 0 关注
  • 3763 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号