如何在Java中将浮点数组转换为双精度数组?
2022-09-01 22:44:46
我有一个浮点数组,我想在Java中将其转换为双精度数组。我知道迭代数组并创建一个新数组的明显方法。我期望Java能够顺利地消化浮点数[],它希望与double[]一起使用...但它不能与此一起工作。进行此转换的优雅,有效的方法是什么?
我有一个浮点数组,我想在Java中将其转换为双精度数组。我知道迭代数组并创建一个新数组的明显方法。我期望Java能够顺利地消化浮点数[],它希望与double[]一起使用...但它不能与此一起工作。进行此转换的优雅,有效的方法是什么?
基本上,必须对每个值进行转换。两种数组类型之间没有隐式转换,因为在 JITting 之后用于处理它们的代码会有所不同 - 它们具有不同的元素大小,浮点数需要转换,而双精度不需要。将此与引用类型的数组协方差进行比较,在引用类型中,读取数据时不需要转换(例如,String 引用的位模式与 Object 引用的位模式相同),并且所有引用类型的元素大小都相同。
简而言之,某些东西必须在循环中执行转换。我不知道有任何内置方法可以做到这一点。我确信它们存在于某个地方的第三方库中,但除非你碰巧已经使用了其中一个库,否则我只会编写自己的方法。为方便起见,下面是一个示例实现:
public static double[] convertFloatsToDoubles(float[] input)
{
if (input == null)
{
return null; // Or throw an exception - your choice
}
double[] output = new double[input.length];
for (int i = 0; i < input.length; i++)
{
output[i] = input[i];
}
return output;
}
在Java 8中,如果你真的想,你可以这样做:
IntStream.range(0, floatArray.length).mapToDouble(i -> floatArray[i]).toArray();
但是最好(更干净,更快,更好的语义)使用Jon Skeet的功能。