Java 8 Stream过滤列表中列表的值
发布时间:2020-12-14 05:13:58 所属栏目:Java 来源:网络整理
导读:我有一个看起来如下的对象 class MyObject { String type; ListString subTypes;} 是否有可能,给定一个MyObject列表,使用Java 8流来过滤类型和子类型? 到目前为止我有 myObjects.stream() .filter(t - t.getType().equals(someotherType) .collect(Collecti
我有一个看起来如下的对象
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>表示. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |