猿问

java8 flatmap

java8 stream 的 flatmap 跟map有啥区别?有例子不

Helenr
浏览 3736回答 2
2回答

大话西游666

比如一个List<?>,map能够直接操作list中的每个对象List<Integer>&nbsp;integers&nbsp;=&nbsp;new&nbsp;ArrayList<>(); //添加数据略 integers.stream.map(i&nbsp;->&nbsp;i&nbsp;+&nbsp;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);

慕虎7371278

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()))))
随时随地看视频慕课网APP

相关分类

Java
我要回答