我有一个字符串数组:
String[] guaranteedOutput = Arrays.copyOf(values, values.length,
String[].class);
所有String值都是数字。数据应转换为Double[]
。
问题
在Java中是否有一个单行解决方案来实现这一点,或者我们需要循环并将每个值转换为Double?
答案 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;
这个想法是一样的。把它变成一种方法,传递你的参数,你就是金色的。