java - 使用 Java 8 连接集合

标签 java guava java-8 java-stream

我想遍历一组集合。使用 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());

你在这里做的是:

  1. 获得 Stream<Collection<Group>> .
  2. 然后平面图每得到Stream<Person> , 来自Group , 返回到您的原始流,类型为 Stream<Person> .

现在在 flatMap() 之后,你可以用获得的Stream<Person>做任何你想做的事.

关于java - 使用 Java 8 连接集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22893263/

相关文章:

java - 构建自定义 java 配置注释 - 类似于自定义 XML 命名空间

java - 为什么我在 Scala 中出现 OutOfMemoryError 编译错误?

java - 如何从 ByteBuffer 中提取使用过的字节数组?

java - 在Java中合并两个列表

java - Guava ImmutableSet : Builder vs. 的?

java - 如何将这两种方法重构为一种方法

Java 8 将多个可选参数映射到一个函数中

java - ReentrantLock 与 stampedlock 有什么区别?更喜欢哪一个?

java - 为远程调用引入压缩

java - 尝试在空对象引用上调用虚拟方法“boolean java.util.ArrayList.add”