使用包含列表的流过滤数据?
Filtering data with a stream that consists of a list?
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());
例如,找到一个红色的圆形形状。
问题是我不能直接过滤它,因为数据在另一个列表中。
我可以 for 循环所有元素并将每个 shapeList 添加到一个大列表中,然后流式传输该列表。但这需要一个 for 循环并遍历每个循环,如果 for 循环,我想使用流来代替。
您需要展平地图,然后遍历形状。
将 shape.getShape().equals("Round")
替换为您想要的形状过滤条件。
List<Shapes> roundShapes = elementList.stream().flatMap(element -> element.getShapeList().stream())
.filter(shape -> shape.getShape().equals("Round")).collect(Collectors.toList());
你是说你想得到一个 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());
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());
例如,找到一个红色的圆形形状。 问题是我不能直接过滤它,因为数据在另一个列表中。
我可以 for 循环所有元素并将每个 shapeList 添加到一个大列表中,然后流式传输该列表。但这需要一个 for 循环并遍历每个循环,如果 for 循环,我想使用流来代替。
您需要展平地图,然后遍历形状。
将 shape.getShape().equals("Round")
替换为您想要的形状过滤条件。
List<Shapes> roundShapes = elementList.stream().flatMap(element -> element.getShapeList().stream())
.filter(shape -> shape.getShape().equals("Round")).collect(Collectors.toList());
你是说你想得到一个 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());