代码之家  ›  专栏  ›  技术社区  ›  Angelina

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

  •  6
  • Angelina  · 技术社区  · 7 年前

    我有一个 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);
    

    现在,我必须为if添加功能 ProEffectiveDate 什么时候 生效日期 为空,如何忽略此筛选器?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Naman    7 年前

    看来你的逻辑需要检查一下 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);
    }