如果我有类 Warehouse
,其中包含不同框的列表,则放置在这里。
盒子里面可以有盒子,在这种情况下,它们的 id 以“大”开头,并且它们的列表由“小”盒子组成
class Warehouse{
private List<Box> boxes;
}
class Box {
private String id;
private List<Box> innerBoxes;
}
下一个方法返回 Warehouse
上 Box
的 Stream
。
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/