【发布时间】:2015-03-18 14:02:37
【问题描述】:
finalList= resultList.stream()
. filter(nestedDo -> nestedDo.getAttrib8() == 'S' &&
nestedDo.getFirstChildList().stream()
.filter(c ->
("ST2".equals(c.getAttrib18()) ||
"ST3".equals(c.getAttrib18()) ||
"ST4".equals(c.getAttrib18())
&&
c.getGrandChildList() != null &&
c.getGrandChildList().stream()
.filter(gc ->
date.after(gc.getAttrib19()) &&
date.before(gc.getAttrib43())
)
.findAny().isPresent())
)
.findAny().isPresent())
.collect(Collectors.toList());
NestedCustomerDO50 是一个由 NestedFirstChildDO50 继承的类,它由 NestedGrandChildDO50 继承。每个类都包含子类的列表(即 NestedCustomerDO50 包含 NestedFirstChildDO50 的列表,NestedFirstChildDO50 包含 NestedGrandChildDO50 的列表)。每个类包含 50 个属性(attrib1-atrib50)。
resultList 和 finalList 是 NestedCustomerDO 类型的对象列表。
getFirstChildList() 返回 NestedFirstChildDO50 类型对象的数组列表 getGrandChildList() 返回 NestedGrandtChildDO50 类型对象的数组列表
这里的finalList包含基于所有级别过滤的过滤结果。但是,如果 resultList 基于第二级和第三级的过滤给出结果(非空),我想将 resultList 作为 finalList 。因此,每当第二级和第三级过滤返回结果时,我都想获得带有完整子列表的父列表。
例如:如果 NestedCustomerDO50 包含客户详细信息,NestedFirstChildDO50 包含地址详细信息,NestedGrandtChildDO50 包含城市详细信息,当我们通过上面的代码搜索时,我们只得到指定的过滤结果,但我想要所有客户详细信息,包括所有地址(不是指定的过滤地址)。
如果对问题有任何疑问,请添加为评论。
【问题讨论】:
-
您不应该根据混淆代码提出问题。您在谈论“客户详细信息”、“城市详细信息”等,但我们在您的代码中看到的只是
ChildList或GrandChildList中的getAttrib18、getAttrib19和getAttrib43。我们应该如何知道该代码中的客户或城市是什么?