我有一个看起来如下的对象
class MyObject { String type; List<String> subTypes; }
是否有可能,给定一个MyObject列表,使用Java 8流来过滤类型和子类型?
到目前为止我有
myObjects.stream() .filter(t -> t.getType().equals(someotherType) .collect(Collections.toList());
但在此范围内,我还希望在每个子类型上使用另一个过滤器来过滤特定子类型的子类型.我无法弄清楚如何做到这一点.
一个例子是
myObject { type: A,subTypes [ { X,Y,Z } ] } myObject { type: B,subTypes [ { W,X,Y } ] } myObject { type: B,Z } ] } myObject { type: C,Z } ] }
我会传入matchType B和subType Z,所以我希望得到一个结果 – > myObject类型B,子类型:W,Z
以下内容当前返回列表中的2个项目.
myObjects.stream() .filter(t -> t.getType().equals("B") .collect(Collections.toList());
但我想在每个子类型上添加一个额外的过滤器,并且只匹配“Z”存在的位置.
解决方法
你可以做:
myObjects.stream() .filter(t -> t.getType().equals(someotherType) && t.getSubTypes().stream().anyMatch(<predicate>)) .collect(Collectors.toList());
这将获取所有MyObject对象
>符合关于类型成员的标准.>包含嵌套List< String>中的对象满足一些其他标准,用< predicate>表示.