如何在一行中将String Array转换为Double Array

时间:2012-02-01 18:36:53

标签: java

我有一个字符串数组:

String[] guaranteedOutput = Arrays.copyOf(values, values.length,
String[].class);

所有String值都是数字。数据应转换为Double[]

问题
在Java中是否有一个单行解决方案来实现这一点,或者我们需要循环并将每个值转换为Double?

8 个答案:

答案 0 :(得分:25)

Java 8 Stream API允许这样做:

double[] doubleValues = Arrays.stream(guaranteedOutput)
                        .mapToDouble(Double::parseDouble)
                        .toArray();

双冒号用作方法参考。 Read more here

在使用代码之前,请不要忘记import java.util.Arrays;

UPD:如果要将数组转换为Double [],而不是double [],则可以使用以下代码:

Double[] doubleValues = Arrays.stream(guaranteedOutput)
                        .map(Double::valueOf)
                        .toArray(Double[]::new);

答案 1 :(得分:8)

创建一个使用循环实现它的方法,然后调用您的方法,并且您将拥有一个单行解决方案。

Java API中没有buit-in方法可以做到这一点。

答案 2 :(得分:6)

在一行中:p

Double[] d=new ArrayList<Double>() {{for (String tempLongString : tempLongStrings) add(new Double(tempLongString));}}.toArray(new Double[tempLongStrings.length]);

答案 3 :(得分:1)

循环有什么问题?

double[] parsed = new double[values.length];
for (int i = 0; i<values.length; i++) parsed[i] = Double.valueOf(values[i]);

不是特别笨拙。另外,您可以轻松添加正确的错误处理。

当然,您可以随意轻松包装。

OpenJDK8可能会带来lambda表达式,使用Double.valueOf作为“map”函数将是使用它的一个主要示例。

答案 4 :(得分:1)

CollectionUtils.collect(guaranteedOutput, new Transformer() { 
        public Object transform(Object i) { 
            return Double.parseDouble(i); 
        }  
});

修改

请记住,JavaSDK中没有!我正在使用http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html

答案 5 :(得分:1)

你想要一个函数式编程的映射操作,遗憾的是Java没有提供。相反,你必须循环为

double[] nums = new double[guaranteedOutput.length];
for (int i = 0; i < nums.length; i++) {
    nums[i] = Double.parseDouble(guaranteedOutput[i]);
}

答案 6 :(得分:1)

这会将一个字符串数组转换为一行中的双精度数组。

String[] stringArray = {"1.3", "4.6", "3.2"};
double[] doubleArray = Arrays.stream(stringArray).mapToDouble(Double::parseDouble).toArray();

答案 7 :(得分:0)

我认为你将不得不循环并将每个值转换为double。这就是我在其他一个问题中做到的:

for(getData : getDataArray){
 double getTotal;
 getTotal = getTotal + Double.parseDouble(getData);
}
return getTotal;

这个想法是一样的。把它变成一种方法,传递你的参数,你就是金色的。