如果我有Warehouse
类,其中包含“不同框”列表,则放在此处。
盒子内部可以有盒子,在这种情况下,它们的ID以“ big”开头,其List包含“ small”盒子
class Warehouse{
private List<Box> boxes;
}
class Box {
private String id;
private List<Box> innerBoxes;
}
next方法返回Stream
上Box
个对象中的Warehouse
。
public Stream<Box> getBoxes();
我如何获得所有一个仓库和“大”盒子中的盒子? 我尝试过另一种方式
public Stream<Box> getAllBoxes(){
return getBoxes().stream().filter(b -> b.getId().startsWith("big"));
}
但是它只返回一个内箱,如何在一个流中收集内箱和大箱?
答案 0 :(得分:5)
如果您试图同时收集内部和大盒子,则可以使用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