我有一个字符串数组:
String[] guaranteedOutput = Arrays.copyOf(values, values.length,
String[].class);
所有字符串的值都是数字。数据应该转换为 Double[]
。
问题
是否有一行代码的解决方案可以在Java中实现这个目标,或者我们需要循环并将每个值转换为Double?
我有一个字符串数组:
String[] guaranteedOutput = Arrays.copyOf(values, values.length,
String[].class);
所有字符串的值都是数字。数据应该转换为 Double[]
。
问题
是否有一行代码的解决方案可以在Java中实现这个目标,或者我们需要循环并将每个值转换为Double?
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);
创建一个使用循环实现它的方法,然后调用您的方法,您将得到一行解决方案。
Java API没有内置方法来执行此操作。
Double[] d=new ArrayList<Double>() {{for (String tempLongString : tempLongStrings) add(new Double(tempLongString));}}.toArray(new Double[tempLongStrings.length]);
String[] stringArray = {"1.3", "4.6", "3.2"};
double[] doubleArray = Arrays.stream(stringArray).mapToDouble(Double::parseDouble).toArray();
map
以及mapToDouble
一起使用(并且可能会略微更快)? - speedstyle循环有什么问题吗?
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”函数将是使用它的一个主要示例。
你想要一个函数式编程中的映射操作,但不幸的是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。
org.apache.commons.collections
的一部分——话虽如此,你的回答非常出色。(我想给你点赞,但今天的投票次数已用完) - Brian Roach我想你需要循环遍历并将每个值转换为double类型。这是我在另一个问题中的做法:
for(getData : getDataArray){
double getTotal;
getTotal = getTotal + Double.parseDouble(getData);
}
return getTotal;
思路是一样的。将其转化为一个方法,传递参数,你就大功告成了。
double[]
?它更快。 - Has QUIT--Anony-Mousse