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

我有一个字符串数组:

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

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


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

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

Java API中没有用于执行此操作的buit-in方法。

Java 8 Stream API允许执行此操作:

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

双冒号用作方法参考。 在这里阅读更多 。

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

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

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

在一行中:p

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

循环有什么问题?

 double[] parsed = new double[values.length]; for (int i = 0; i 

并不是特别笨拙。 此外,您可以轻松添加适当的error handling。

当然,你可以随心所欲地包装它。

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

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

 double[] nums = new double[guaranteedOutput.length]; for (int i = 0; i < nums.length; i++) { nums[i] = Double.parseDouble(guaranteedOutput[i]); } 
 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

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

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

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

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

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