在Java中如何对数组进行转换

4
我是一名有帮助的助手,为您翻译如下内容:

我想将一个int数组转换成一个double数组。

当我有以下代码时:

int arr[] = {1, 2, 3}; 

我希望您可以使用arr作为一个double[]参数传递给方法,这与IT技术有关。请问最好的方法是什么?
强制转换。
(double[])arr

无法工作。

我可以遍历arr

double[] dblA = new double[arr.length];
int ind=0; 
for (int x:arr)
    dblA[ind++]=x;   // (double)x; 

有没有更好的方法来做这件事?

System.arraycopy不能胜任--它不能处理两种不同原始类型的数组。

注意:看到了Java中将对象强制转换为数组和其他一些讨论。

TIA。


请看这里:https://dev59.com/xWHVa4cB1Zd3GeqPn4tG。 - liotims
谢谢这些有用的笔记。C 做了这些事情。Java 没有数组的 T 比较让人不舒服。 - user3880721
2
“C做这些事情”?我不知道在C中有什么方法可以做到这一点,除非通过循环遍历数组并通过将每个整数转换为双精度浮点数来创建一个新数组。我在C中错过了什么吗?(如果您谈论的是C ++中的STL算法,则我认为Java中可能有相应的算法。) - ajb
@ajb System.arraycopy() 没有这个功能。Arrays 里也没有。我想不到还有哪里的 API 可以实现这个。 - user3880721
你还没有回答我的问题:C语言有类似这样的东西吗?虽然在一些C++函数中,你可以从一个集合复制到另一个集合,并提供一个作用于每个元素的转换函数;但是Java 8也具备这种能力(使用lambda表达式)。 - ajb
2
在C语言中,你可以将任何东西转换为任何东西。虽然你得到的可能是一些垃圾,但你确实可以进行类型转换。 :) - biziclop
2个回答

2

如果使用Java 7或更低版本,则没有简单的方法,您只需手动复制它们。

如果使用Java 8,则可以使用流(需要循环遍历数组)更加轻松地完成此操作,例如:

int[] intArray = {1, 2, 3};
double[] doubleArray = Arrays.stream(intArray)
    .mapToDouble(i -> i)
    .toArray();

这将首先创建一个IntStream,然后使用转换IntToDoubleFunction将其映射到DoubleStream,该函数将每个int i映射到相应的double i。最后,您可以使用toArray进行收集。


你可以使用 asDoubleStream() 替代:Arrays.stream(integerArray).asDoubleStream().toArray();. - Константин Ван

1

使用Java 8,基于闭包的解决方案非常优雅:

package com.java.se.stackoverflow;

import java.util.Arrays;

public class ArrayCast {

    public static void main(String[] argv) throws Exception {
        int[] inputArray = new int[]{23, 4, 5, 6, 89};
        double[] outputArray = new double[inputArray.length];
        Arrays.setAll(outputArray, inputArrayIndex -> (double) inputArray[inputArrayIndex]);

        System.out.println(Arrays.toString(outputArray));

    }

}

给定的 IntToDoubleFunction 是做什么用的? - Sotirios Delimanolis
它将每个整数元素转换为双精度值并返回。 - Maciej Szumielewicz
哪个整数元素? - Sotirios Delimanolis
抱歉,我的错误。给定IntToDoubleFunction函数获取整数数组中每个元素的索引并将其转换为双精度返回。 - Maciej Szumielewicz
这种写法比原始循环更“优雅”在哪里?它更加晦涩,如果你认为这是“优雅”的话,那么它也更长。 - Hot Licks
我不认为那段代码晦涩难懂。我个人认为基于闭包的代码更好。 - Maciej Szumielewicz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接