【问题标题】:casting a Java array强制转换 Java 数组
【发布时间】:2014-09-06 19:41:01
【问题描述】:

我希望将 int 数组转换为 double 数组。

所以,当我有的时候

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

我想使用arr,比如将其作为double[] 参数传递 到一个方法。

最好的方法是什么?

演员表

(double[])arr

不起作用。

我可以遍历arr:

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

有更好的方法吗?

System.arraycopy 不这样做- 不适用于两种不同原始类型的数组。

注意:看到Casting Object to Array in Java 和其他一些讨论。

TIA。

【问题讨论】:

  • 感谢有用的注释。 C 做这些事情。 Java 在数组上没有 t 有点令人不安。
  • “C 做这些事”?我不知道有什么方法可以在 C 中做到这一点,而无需遍历数组并通过将每个整数转换为双精度来创建一个新数组。我错过了 C 语言中的某些内容吗? (如果你说的是 C++ 中的 STL 算法,我认为 Java 中可能有一个等价的算法。)
  • @ajb System.arraycopy() 没有它。数组中也没有任何内容。想不出 API 中的其他任何地方都可以。
  • 你可以将任何东西转换为 C 中的任何东西。你会得到完全的垃圾,但你可以转换它。 :)

标签: java arrays casting


【解决方案1】:

使用 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();
【解决方案2】:

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 做了什么?
  • 它转换每个整数元素并返回双精度值
  • 哪个整数元素?
  • 对不起我的错误。给定 IntToDoubleFunction 函数获取 int 数组中每个元素的索引并将返回转换为 double
  • 这比 OP 的原始循环更“优雅”吗?当然,如果您称其为“优雅”,它会更加晦涩,而且更长。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多