gpt4 book ai didi

java - 使用 Java 8 Streams 实现类的层次结构

转载 作者:行者123 更新时间:2023-12-01 11:45:57 24 4
gpt4 key购买 nike

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 继承的类,而 NestedFirstChildDO50 又由 NestedGrandChildDO50 继承。每个类都包含子类的列表(即 NestedCustomerDO50 包含 NestedFirstChildDO50 的列表,NestedFirstChildDO50 包含 NestedGrandChildDO50 的列表)。每个类包含 50 个属性(attrib1-atrib50)。

resultList 和 FinalList 是 NestedCustomerDO 类型的对象列表。

getFirstChildList() 返回 NestedFirstChildDO50 类型的对象的 arrayListgetGrandChildList() 返回 NestedGrandtChildDO50 类型的对象的 arrayList

这里finalList包含了基于所有级别过滤的过滤结果。但如果 resultList 根据第二级和第三级的过滤给出结果(非空),我想将 resultList 获取为 FinalList。因此,每当第二级和第三级过滤返回结果时,我都想获取具有完整子列表的父列表。

例如:如果 NestedCustomerDO50 保存客户详细信息,NestedFirstChildDO50 保存地址详细信息,NestedGrandtChildDO50 保存城市详细信息,当我们通过上面的代码搜索时,我们只得到指定的过滤结果,但我想要所有客户详细信息,包括所有地址(不是指定的过滤地址) )。

如果对问题有任何疑问,请添加评论。

最佳答案

您的描述与您的代码一样神秘,但据我了解,您只是想知道是否有匹配项,如果有,则使用整个原始列表,否则使用过滤后的(然后为空)列表。

这是了解 anyMatch 的正确点这不仅可以解决您的任务,还可以简化您的内部条件,因为您可以将 .filter(element->condition).findAny().isPresent() 替换为 .anyMatch(element->条件)

List<?> finalList = resultList.stream()
.anyMatch(nestedDo -> nestedDo.getAttrib8() == 'S' &&
nestedDo.getFirstChildList().stream().anyMatch(c ->
"ST2".equals(c.getAttrib18())
|| "ST3".equals(c.getAttrib18())
|| "ST4".equals(c.getAttrib18())
&& c.getGrandChildList()!=null
&& c.getGrandChildList().stream().anyMatch(gc ->
date.after(gc.getAttrib19()) && date.before(gc.getAttrib43()))
))? resultList: Collections.emptyList();

请注意,我保持最内部条件的逻辑与您的问题完全相同,尽管大括号的位置对我来说看起来很可疑。

关于java - 使用 Java 8 Streams 实现类的层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29124155/

24 4 0