如何在一行中将字符串数组转换为双精度数组

15

我有一个字符串数组:

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

所有字符串的值都是数字。数据应该转换为 Double[]

问题
是否有一行代码的解决方案可以在Java中实现这个目标,或者我们需要循环并将每个值转换为Double?


为什么不用 double[]?它更快。 - Has QUIT--Anony-Mousse
循环并转换它们中的每一个,这是你可以做的。 - asgs
8个回答

38

Java 8 流 API 允许这样做:

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

双冒号用作方法引用。在这里阅读更多信息

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

更新:如果您想将数组强制转换为Double[]而不是double[],可以使用以下代码:

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

13

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

Java API没有内置方法来执行此操作。


6
一句话概括:p
Double[] d=new ArrayList<Double>() {{for (String tempLongString : tempLongStrings) add(new Double(tempLongString));}}.toArray(new Double[tempLongStrings.length]);

4
这将在一行中将一个字符串数组转换为双精度浮点数数组。
String[] stringArray = {"1.3", "4.6", "3.2"};
double[] doubleArray = Arrays.stream(stringArray).mapToDouble(Double::parseDouble).toArray();

1
这应该与map以及mapToDouble一起使用(并且可能会略微更快)? - speedstyle

2

循环有什么问题吗?

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”函数将是使用它的一个主要示例。


2

你想要一个函数式编程中的映射操作,但不幸的是Java并没有提供。相反,你必须使用循环。

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

1

1
你漏了一个分号,而且格式不规范,使得代码难以阅读;我已经修复了。值得注意的是,这并不是Java核心的一部分,而是org.apache.commons.collections的一部分——话虽如此,你的回答非常出色。(我想给你点赞,但今天的投票次数已用完) - Brian Roach
哈哈!感谢您的编辑!我有点喜欢使用Commons Collections来实现这个目的! - Arthur Neves

0

我想你需要循环遍历并将每个值转换为double类型。这是我在另一个问题中的做法:

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

思路是一样的。将其转化为一个方法,传递参数,你就大功告成了。


除非在您的 for 循环中缺少类型;如果他想获得一个数组而不是一个可追加的列表,您实际上需要知道整数索引。 - Has QUIT--Anony-Mousse
我没有明确说明我提供的代码是我工作中使用的Beanshell脚本的一部分,因此缺少数据类型。 - Carlos

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