java - 如何从 int 流中获取 int 类型的平均值?

标签 java java-stream

我正在编写一个程序,其中我必须获得火车的平均延迟,但我遇到了麻烦,因为流必须返回一个 int (这意味着它将近似该值)。我宁愿不使用沮丧。 以下是代码示例

public int getAvgDelay(){
  return trainStop.stream()
                  .flatMapToInt(a->a.getDelays().stream())
                  .average().orElse(-1);
}

getDelays() 返回一个整数列表,其中包含该火车在单个车站的延误情况,我将其转换为流,然后平均值将返回 double 值,但我想找到一种方法来获取 Int它。

总的来说,我在处理大多数流时遇到了麻烦,在使用一些总结收集器后我必须返回单个值,如果您能给我一个关于如何执行此操作的一般规则,我将非常感激!

最佳答案

average方法的结果是double(实际上它是一个OptionalDouble,但这不是重点)。如果您想从您的方法返回一个整数,则必须将结果显式转换为int。发生这种情况是因为 double 保存在 64 位上,而整数保存在 32 位上。因此,您必须显式地从 doubleint 进行转换 - 这样您就同意会失去一些准确性。

您可能有兴趣使用 Math::ceilMath::floorMath::round 等方法来对您的结果进行四舍五入平均的。这些方法也返回 double(Math::round 返回long),因此您也必须显式应用强制转换。然而,这些方法将四舍五入到最接近的整数 - 但它仍然是 double 类型。

关于java - 如何从 int 流中获取 int 类型的平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56826671/

相关文章:

java - 我可以使用 lambda 表达式来累加变量中的总和吗?

java - Java流将字符串列表排序为数字问题

多个参数的Java流averagingInt

java - 如何在recyclerview适配器中使用getItematposition()作为ListView

java - 来自多个模式的 Hibernate 实体

java - 如何使用流将顺序元素添加到列表中

java - 使用 Streams 实现 Java 数据透视表

java - 从 hibernate 配置创建 EntityManagerFactory

java - 调用类/枚举与其对象不同 - Java

java - 将图像从对话框拖放到 Activity 时出现问题