Khi*_*ian 3 java java-8 java-stream
如果我有Warehouse包含不同框列表的类,则放置在这里。盒子里面可以有盒子,在这种情况下,它们的 id 以“big”开头,它们的 List 由“small”盒子组成
class Warehouse{
private List<Box> boxes;
}
class Box {
private String id;
private List<Box> innerBoxes;
}
Run Code Online (Sandbox Code Playgroud)
下一个方法返回Stream的Box是在上课Warehouse。
public Stream<Box> getBoxes();
Run Code Online (Sandbox Code Playgroud)
我如何获得所有盒子,即一个仓库和“大”盒子?我试过下一个方法
public Stream<Box> getAllBoxes(){
return getBoxes().stream().filter(b -> b.getId().startsWith("big"));
}
Run Code Online (Sandbox Code Playgroud)
但是它只返回内盒,如何在一个流中收集内盒和大盒?
小智 5
如果你试图在流中收集内部和大盒子,你可以使用 stream.of() 和 stream.concat();
public Stream<Box> flattened() {
return Stream.concat(
Stream.of(this),
innerBoxes.stream().flatMap(Box::flattened));
}
Run Code Online (Sandbox Code Playgroud)
关于这方面的更多信息可以在这里找到 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |