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(空);
现在,我必须为ifProEffectiveDate
添加函数,以简单地从列表中返回第一行。
当
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
只返回列表的第一个元素吗?注意:答案中使用的假设也得到用于过滤内容的谓词的支持。