【问题标题】:Java8 Stream.filter doesn't work for lazy loading dataJava8 Stream.filter 不适用于延迟加载数据
【发布时间】:2018-10-15 02:52:27
【问题描述】:

这是我的代码:

final ArrayList<DcpDealerQuotaModel> dealerQuotas = (ArrayList)getSearchResults(actionEvent);
        Map<PointOfServiceModel,List<DcpDealerQuotaModel>> dealerQuotaMap = 
dealerQuotas.stream().filter(item->(item.getDealer() == null || item.getDealer().getName().isEmpty())).collect(Collectors.groupingBy(DcpDealerQuotaModel::getDealer));

当我执行debug查看dealerQuotas列表中的数据时,它显示它的大小为8并且每个DcpDealerQuotaModel的dealer属性不为null,但只有在执行getter方法时才会加载dealer。当我调用dealerQuotas.stream().filter(item->(item.getDealer() == null || item.getDealer().getName().isEmpty()))时,它会过滤所有dealerQuotas并返回null ,为什么?

【问题讨论】:

    标签: filter java-stream lazy-loading


    【解决方案1】:

    这是因为您的过滤谓词过滤掉了所有非空经销商,只保留了null 经销商。由于您的stream 中没有这样的经销商,您会得到空结果。改成这样,

    .filter(item->item.getDealer() != null &&   !item.getDealer().getName().isEmpty())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      相关资源
      最近更新 更多