Java 8中如何用Comparator处理Null值并排除价格为Null的元素?
解决方案
要排除getPrezzoUltimoAcquisto为null的元素,只需要在查找最大日期条目之前,先过滤掉这类无效数据即可。利用Java 8的Stream API可以简洁实现这个需求,修改后的代码如下:
public static Double getUltimoPrezzo(List<ArticoliPerFornitore> lista) { try { return lista.stream() // 过滤掉价格为null的元素 .filter(item -> item.getPrezzoUltimoAcquisto() != null) // 按getDataUltimoAcquisto日期倒序找最新条目 .max(Comparator.comparing(ArticoliPerFornitore::getDataUltimoAcquisto)) // 提取价格,过滤后无有效元素则返回null .map(ArticoliPerFornitore::getPrezzoUltimoAcquisto) .orElse(null); } catch (Exception e) { log.logStackTrace(e); return null; } }
关键修改说明:
- 过滤逻辑:通过
filter直接剔除价格为null的条目,确保后续只处理有有效价格的数据 - 链式调用优化:将过滤、查找最新条目、提取价格的逻辑整合,比原
Collections.max写法更清晰直观 - 空结果兼容:用
Optional的orElse(null)处理过滤后无元素的情况,保持原有方法返回null的行为一致
修改后,当列表仅存在价格为null的元素时,方法返回null;若有有效价格的元素,则会返回日期最新的那个有效价格。
内容的提问来源于stack exchange,提问作者bircastri
相关产品推荐
相关产品推荐

