Java 如果元素不为null,则使用lambda过滤器,否则忽略过滤器

Java 如果元素不为null,则使用lambda过滤器,否则忽略过滤器,java,lambda,java-stream,Java,Lambda,Java Stream,我有一个lambda,它当前使用RecordNumber返回日期与传入日期匹配的1st行 ProList 1 RecordNumber 1 ProEffectiveDate NULL ProList 2 RecordNumber 2 ProEffectiveDate 2019-03-01 ProList 3 RecordNumber 3 ProEffectiveDate 2019-03-01 这是我目前的代码: Predicate<Pr

我有一个
lambda
,它当前使用
RecordNumber
返回日期与传入日期匹配的
1st

ProList 1
    RecordNumber 1
    ProEffectiveDate NULL

ProList 2
    RecordNumber 2
    ProEffectiveDate 2019-03-01

ProList 3
    RecordNumber 3
    ProEffectiveDate 2019-03-01
这是我目前的代码:

Predicate<ProList> filteredRow = 
                    it->it.getProEffectiveDate()!=null &&
                    it.getProEffectiveDate().equals(passedInDate);

final ProList minFilteredRow = ProList()
    .stream()
    .filter(filteredRow)                               
    .min(Comparator.comparing(ProList::getRecordNumber))
    .orElse(null);
Predicate filteredRow=
it->it.getProEffectiveDate()=空的&&
it.getProEffectiveDate()等于(PassedDate);
最终ProList minFilteredRow=ProList()
.stream()
.过滤器(filteredRow)
.min(比较器比较(ProList::getRecordNumber))
.orElse(空);
现在,我必须为if
ProEffectiveDate
添加函数,以简单地从列表中返回第一行。
ProEffectiveDate
为空时,我如何忽略此筛选器?

似乎您需要的逻辑是检查
ProEffectiveDate
是否为
null
仅返回列表的第一个元素,基于此,您可以执行如下检查:

ProList minFilteredRow;
if (proLists.stream().anyMatch(a -> a.getProEffectiveDate() == null)) {
    minFilteredRow = proLists.get(0);
} else {
    minFilteredRow = proLists.stream()
            .filter(filteredRow)
            .min(Comparator.comparing(ProList::getRecordNumber))
            .orElse(null);
}

您是否可以创建一个方法来执行此操作,将该方法应用于列表,然后返回结果,该方法在其中进行处理?ProEffectiveDate为null,仅返回第一行。。你的意思是如果
ProEffectiveDate
中的任何一个
null
只返回列表的第一个元素吗?注意:答案中使用的假设也得到用于过滤内容的
谓词的支持。