Java8 Stream.filter 不适用于延迟加载数据
Java8 Stream.filter doesn't work for lazy loading data
这是我的代码:
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 的经销商属性不为 null ,但是只有在执行 getter 方法时才会加载经销商。当我调用 dealerQuotas.stream().filter(item->(item.getDealer() == null || item.getDealer().getName().isEmpty())) 时,它会过滤所有 dealerQuotas 和 return null,为什么?
那是因为您的过滤谓词过滤掉了所有非空经销商,只保留 null
个经销商。由于您的 stream
中没有这样的经销商,您得到的结果是空的。改成这样,
.filter(item->item.getDealer() != null && !item.getDealer().getName().isEmpty())
这是我的代码:
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 的经销商属性不为 null ,但是只有在执行 getter 方法时才会加载经销商。当我调用 dealerQuotas.stream().filter(item->(item.getDealer() == null || item.getDealer().getName().isEmpty())) 时,它会过滤所有 dealerQuotas 和 return null,为什么?
那是因为您的过滤谓词过滤掉了所有非空经销商,只保留 null
个经销商。由于您的 stream
中没有这样的经销商,您得到的结果是空的。改成这样,
.filter(item->item.getDealer() != null && !item.getDealer().getName().isEmpty())