java - 如何将内部元素从流添加到流?

标签 java java-8 java-stream

如果我有类 Warehouse ,其中包含不同框的列表,则放置在这里。 盒子里面可以有盒子,在这种情况下,它们的 id 以“大”开头,并且它们的列表由“小”盒子组成

class Warehouse{
    private List<Box> boxes;
}
class Box {
    private String id;
    private List<Box> innerBoxes;
}

下一个方法返回 WarehouseBoxStream

public Stream<Box> getBoxes();

我如何才能获得所有盒子,即一个仓库和“大”盒子中的盒子? 我尝试了下一个方法

public Stream<Box> getAllBoxes(){
    return getBoxes().stream().filter(b -> b.getId().startsWith("big"));
}

但是它只返回内部盒子,如何在一个流中收集内部盒子和大盒子?

最佳答案

如果你想在流中收集内部盒子和大盒子,你可以使用stream.of()和stream.concat();

public Stream<Box> flattened() {
        return Stream.concat(
                Stream.of(this),
                innerBoxes.stream().flatMap(Box::flattened));
    }

有关这方面的更多信息可以在此处找到 http://squirrel.pl/blog/2015/03/04/walking-recursive-data-structures-using-java-8-streams/

一旦该方法存在于您的 Box 类中,您就可以调用

warehouse.boxes.stream().flatMap(Box::flattened); //Collect as needed

关于java - 如何将内部元素从流添加到流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59358293/

相关文章:

java - Apache VFS 相对路径

java - 为什么使用 Optional.of 而不是 Optional.ofNullable?

参数化类的java流返回数组

java - 在 Java 8 中反转比较器

java - 可以阻止 JIT 优化方法吗?

java - 滞后套接字java

java - 为什么 JDK 8 API 文档中存在实例方法选项卡?

java - 如何在嵌套列表上使用 groupingBy

Java:实现用于比较两个 double[][] 数组的 equals 方法

java 8 : Are LongAdder and LongAccumulator preferred to AtomicLong?