Java8 Stream.filter不适用于延迟加载数据

时间:2018-10-15 02:52:28

标签: filter java-stream lazy-loading

这是我的代码:

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

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

1 个答案:

答案 0 :(得分:2)

这是因为您的过滤谓词会过滤掉所有非null的经销商,并仅保留null个经销商。由于您的stream中没有这样的经销商,因此您得到的结果是空的。像这样更改它,

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