elementList
是所有元素的列表
class Element{
private ArrayList<Shape> shapeList = new ArrayList<Shape>();
}
...
class Shape{
private String color;
private String shape;
}
尝试过滤元素列表,其中每个元素都包含不同形状的列表。
List<Shape> roundShapes = elementList.stream()
.filter(x -> x.getShapeList()(})
//not sure what to have here.
//I need to loop/stream the data that i get form getShapeList(). How to do this?
//A stream inside a stream?
.collect(Collectors.toList());
例如,找到一个红色和圆形的形状。 问题是我不能直接过滤它,因为数据在另一个列表中。
我可以循环所有元素并将每个shapeList添加到一个大列表中,而不是流式传输该列表。但这需要一个for循环并迭代每个循环,我想使用流而不是for循环。
答案 0 :(得分:1)
您需要展平地图然后迭代形状。
将shape.getShape().equals("Round")
替换为您想要的形状的过滤条件。
List<Shapes> roundShapes = elementList.stream().flatMap(element -> element.getShapeList().stream())
.filter(shape -> shape.getShape().equals("Round")).collect(Collectors.toList());
答案 1 :(得分:0)
您是说要最终获得从Shape
个对象收集的Element
个对象列表,并根据某些谓词进行过滤,例如红色和圆形?如果是这样,您可以尝试平面 - 将Element
个对象的流映射到他们的Shape
列表,然后进行过滤,如下所示:
<List<Shapes> roundShapes = elementList.stream()
.flatMap(x -> x.getShapes().stream())
.filter(x -> (x.getColor().equals("red") && x.getShape().equals("round")))
.collect(Collectors.toList());