[英]Concatenate Collections with Java 8
我想迭代一系列集合。 有了番石榴,我會這樣做:
import static com.google.collections.Iterables.*;
class Group {
private Collection<Person> persons;
public Collection<Person> getPersons();
}
class Person {
private String name;
public String getName();
}
Collection<Group> groups = ...;
Iterable<Person> persons = concat(transform(groups, Group::getPersons()));
Iterable<String> names = transform(persons, Person::getName);
但是我怎么能用Java 8流做同樣的事情呢?
groups.stream().map(Group::getPersons())...?
Stream<Person> persons = groups.stream().flatMap(g -> g.getPersons().stream());
您可以通過將流的所有元素平面映射到流中來實現此目的。
讓我用這段代碼解釋一下:
groups.stream()
.flatMap(group -> group.getPersons().stream());
你在這里做的是:
Stream<Collection<Group>>
。 Stream<Person>
從一個Group
平面映射回原始流,該流是Stream<Person>
類型。 現在在flatMap()
,您可以使用獲得的Stream<Person>
執行任何操作。
我想你需要flatMap
:
Stream<Person> persons = groups.stream().flatMap(g -> g.getPersons().stream());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.