我正在编写一个程序,其中我必须获得火车的平均延迟,但我遇到了麻烦,因为流必须返回一个 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 位上。因此,您必须显式地从 double
到 int
进行转换 - 这样您就同意会失去一些准确性。
您可能有兴趣使用 Math::ceil
、Math::floor
或 Math::round
等方法来对您的结果进行四舍五入平均的。这些方法也返回 double(Math::round
返回long
),因此您也必须显式应用强制转换。然而,这些方法将四舍五入到最接近的整数 - 但它仍然是 double
类型。
关于java - 如何从 int 流中获取 int 类型的平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56826671/