【问题标题】:Java 8 stream average for float浮点数的 Java 8 流平均值
【发布时间】:2014-09-16 19:18:34
【问题描述】:

我有以下型号:

public class WeightChange {

    private float value;

    public float getValue() {
        return value;
    }

    public void setValue(float value) {
        this.value = value;
    }

}

和收藏:

private List<WeightChange> weightChanges;

我已经使用 Java 8 特性实现了获取平均权重值的函数:

public float getAvgChangedWeight() {
    return (float) weightChanges.stream().mapToDouble(WeightChange::getValue).average().getAsDouble();      
}

能否请您帮忙改进它,因为我认为强制转换为 double 不是一个好主意。

weightChanges 集合为空时,它也会引发异常。在这种情况下如何改进它?

【问题讨论】:

  • “我不认为转换为 double 是一个好主意” - 以什么方式?你在担心什么?我觉得这完全合理。
  • @JonSkeet 我只是感觉到了 :) 另外,我还添加了一个案例 - 当 weightChanges 集合为空时它会引发异常。在这种情况下如何改进它?
  • 根据经验,您应该始终使用double 进行计算。唯一应该使用float 的时候是需要存储大量数字的时候。
  • 使用float(或short)的理由并不多。这可能就是 Java 8 设计者在设置新的流类和方法时忽略了这些的原因。

标签: java java-8 java-stream


【解决方案1】:

要回答您问题的第二部分,如果您想在列表为空时避免异常并返回一些double 值,请使用orElse 而不是getAsDouble

return weightChanges.stream()
    .mapToDouble(WeightChange::getValue)
    .average()
    .orElse(Double.NaN);

【讨论】:

  • Double.NaN - 一个持有非数字 (NaN) 的常量
猜你喜欢
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
相关资源
最近更新 更多