2 回答

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);

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())
)))
添加回答
舉報