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

Ang*_*ina 5 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
Run Code Online (Sandbox Code Playgroud)

这是我目前的代码:

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);
Run Code Online (Sandbox Code Playgroud)

现在,我必须添加if ProEffectiveDate为null的功能,以便从列表中返回第一行.如果ProEffectiveDate为null,我该如何忽略此过滤器?

Nam*_*man 2

似乎您所需的逻辑是检查是否任何一个仅返回列表的第一个元素ProEffectiveDatenull,基于此您可以进行检查:

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);
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:答案中使用的假设也得到用于过滤内容的“谓词”的支持。 (3认同)