gpt4 book ai didi

java - 过滤器搜索 Java 8 流

转载 作者:太空宇宙 更新时间:2023-11-04 10:33:41 25 4
gpt4 key购买 nike

我正在尝试使用 Java 8 流编写过滤函数,以按多个参数进行过滤。

createdFrom - Date (mm-dd-yyyy) // if null, filter without createddate From
createdTo - Date - (mm-dd-yyyy) // if null, filter without createddate to
CreatedBy - String //if null, filter without createdby
Intaketype - List<String> // if empty, filter with all intaketypes

如果没有传递任何参数,我不想按该参数进行过滤。例如,如果给我 createBy null,intaketype 为“Approved”,createdfrom 为 02-04-2017,createdto 为 03-03-2018,那么我希望所有用户创建的给定日期中所有已批准的摄入量。

List<Intake> intakes= intakeservice.getAllintakes.stream()
.filter(el -> intaketype.getIntaketype.contains(el.getIntaketype())
&& intaketype.getCreatedBy.contains(el.getCreatedBy())
&& el.getCreatedDate().before(el.dateTo)
&& el.getCreatedDate().after(el.dateFrom))
.collect(Collectors.toList());

但是,如果传递的任何参数为 null 或空,我的代码将返回一个空数组。我不知道如何告诉它不要按特定参数(如果未传递、为空或为 null)进行过滤。

非常感谢您的帮助!

最佳答案

我建议您创建多个 .filter(),在其中描述一个规则的逻辑。 .filter() 规则在流中具有逻辑 AND,即如果 .filter() 规则之一为 false,则不会对其进行处理。

List<Intake> intakes= intakeservice.getAllintakes.stream()
.filter(el -> Objects.isNull(el.dateTo) || el.getCreatedDate().before(el.dateTo))
.filter(el -> Objects.isNull(el.dateFrom) || el.getCreatedDate().after(el.dateFrom))
.filter(el -> Objects.isNull(el.getCreatedBy) || intaketype.getCreatedBy.contains(el.getCreatedBy()))
.filter(el -> Objects.isNull(el.getIntaketype) || el.getIntaketype.size == 0 || intaketype.getIntaketype.contains(el.getIntaketype())
.collect(Collectors.toList());

让我们深入研究其中一条规则:el -> Objects.isNull(el.dateTo) || el.getCreatedDate().before(el.dateTo)

如果 dateTo 为 null,则 lambda 的结果为 true。如果 dateTo 不为 null,则结果是 dateTo 与 el.getCreatedDate() 的比较

如果 .filter() 为 false,则该记录将被过滤并且不会在流中进行处理。

关于java - 过滤器搜索 Java 8 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49723537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com