我有一个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为null时,如何忽略此过滤器?

最佳答案

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

08-16 09:49