Java如何通过mapper获取Set<Measurement>中指定属性的最大值
解决方法
核心修改点
你只需要调整求最大值的stream调用逻辑,将硬编码的属性读取替换为mapper调用即可,其余原有代码无需改动:
将原代码中:
OptionalDouble maximum = stationAverages.stream().mapToDouble(Measurement::getMaxTemperature).max();
替换为:
OptionalDouble maximum = stationAverages.stream().mapToDouble(m -> mapper.apply(m)).max();
说明
- 入参
mapper是Function<Measurement, Double>类型,调用mapper.apply(Measurement实例)即可动态获取你指定的属性值 mapToDouble会自动将mapper返回的Double包装类型拆箱为基础类型double,和原有返回值OptionalDouble的逻辑完全兼容- 你已提前在filter阶段过滤了属性值为NaN的情况,无需额外处理异常值
可选优化
如果存在mapper返回null的可能,可以调整filter的判断条件,避免空指针异常:
.filter(m -> m.getDate().isAfter(startDate) && m.getDate().isBefore(endDate) && mapper.apply(m) != null && !Double.isNaN(mapper.apply(m)) )
内容的提问来源于stack exchange,提问作者A. Vreeswijk
相关产品推荐
相关产品推荐

