我想遍历一组集合。使用 Guava ,我会这样做:
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())...?
最佳答案
您可以通过将流的所有元素平面映射到您的流中来实现这一点。
让我用这段代码来解释:
groups.stream()
.flatMap(group -> group.getPersons().stream());
你在这里做的是:
- 获得
Stream<Collection<Group>>
. - 然后平面图每得到
Stream<Person>
, 来自Group
, 返回到您的原始流,类型为Stream<Person>
.
现在在 flatMap()
之后,你可以用获得的Stream<Person>
做任何你想做的事.
关于java - 使用 Java 8 连接集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22893263/