fif*_*uri 20 java type-conversion
我有一个浮点数组,我想将它转换为Java中的双精度数组.我知道迭代数组并创建一个新数组的明显方法.我希望Java能够顺利地消化一个float [],它希望使用double [] ......但它无法使用它.这种转换的优雅,有效方式是什么?
Jon*_*eet 30
基本上什么需要做的每一个值的转换.两种数组类型之间没有隐式转换,因为在JITting之后用于处理它们的代码会有所不同 - 它们具有不同的元素大小,而float需要转换,而double则不需要.将此与参考类型的数组协方差进行比较,其中在读取数据时不需要转换(例如,对于作为对象引用的字符串引用,位模式相同),并且所有引用类型的元素大小相同.
简而言之,某些东西必须在循环中执行转换.我不知道有任何内置的方法来做到这一点.我确定它们存在于某个地方的第三方库中,但除非您恰好使用其中一个库,否则我只想编写自己的方法.为方便起见,这是一个示例实现:
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;
}
Run Code Online (Sandbox Code Playgroud)
在Java 8中,如果您真的想,可以:
IntStream.range(0, floatArray.length).mapToDouble(i -> floatArray[i]).toArray();
Run Code Online (Sandbox Code Playgroud)
但是使用Jon Skeet的功能更好(更干净,更快,更好的语义).