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

时间:2019-02-06 18:27:15

标签: java lambda java-stream

我有一个lambda,当前通过使用1st返回RecordNumber行,其中日期与传入的日期匹配。

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);

现在,我必须为ProEffectiveDate为null添加功能,以简单地从列表中返回第一行。 当ProEffectiveDate为空时,如何忽略此过滤器?

1 个答案:

答案 0 :(得分:2)

似乎您需要的逻辑是检查 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);
}