Reputation: 91969
I have a string array as:
String[] guaranteedOutput = Arrays.copyOf(values, values.length,
String[].class);
All the String values are numbers. The data should be converted to a Double[]
.
Question
Is there a one line solution in Java to achieve this or we need to loop and convert each value to a Double?
Upvotes: 15
Views: 83625
Reputation: 1503
Java 8 Stream API allows to do this:
double[] doubleValues = Arrays.stream(guaranteedOutput)
.mapToDouble(Double::parseDouble)
.toArray();
Double colon is used as a method reference. Read more here.
Before using the code don't forget to import java.util.Arrays;
UPD: If you want to cast your array to Double[], not double[], you can use the following code:
Double[] doubleValues = Arrays.stream(guaranteedOutput)
.map(Double::valueOf)
.toArray(Double[]::new);
Upvotes: 39
Reputation: 41
This will convert an array of strings to an array of doubles in one line.
String[] stringArray = {"1.3", "4.6", "3.2"};
double[] doubleArray = Arrays.stream(stringArray).mapToDouble(Double::parseDouble).toArray();
Upvotes: 4
Reputation: 20065
In one line :p
Double[] d=new ArrayList<Double>() {{for (String tempLongString : tempLongStrings) add(new Double(tempLongString));}}.toArray(new Double[tempLongStrings.length]);
Upvotes: 6
Reputation: 12128
CollectionUtils.collect(guaranteedOutput, new Transformer() {
public Object transform(Object i) {
return Double.parseDouble(i);
}
});
EDIT
Keep in mind that this is no in JavaSDK ! I am using http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html
Upvotes: 1
Reputation: 14458
You want a map operation from functional programming, which unfortunately Java does not offer. Instead, you have to loop as
double[] nums = new double[guaranteedOutput.length];
for (int i = 0; i < nums.length; i++) {
nums[i] = Double.parseDouble(guaranteedOutput[i]);
}
Upvotes: 2
Reputation: 77454
What is wrong with a loop?
double[] parsed = new double[values.length];
for (int i = 0; i<values.length; i++) parsed[i] = Double.valueOf(values[i]);
is not particularly clumsy. Plus, you can easily add proper error handling.
Of course you can easily wrap this as you like.
OpenJDK8 will probably bring lambda expressions, and using Double.valueOf as "map" function would be a prime example for using this.
Upvotes: 2
Reputation: 1935
I think you're going to have to loop through and convert each value over to a double. This is how I did it in one of my other questions:
for(getData : getDataArray){
double getTotal;
getTotal = getTotal + Double.parseDouble(getData);
}
return getTotal;
The idea is the same. Turn that into a method, pass your paramters and you're golden.
Upvotes: 0
Reputation: 691755
Create a method implementing it using a loop, then call your method, and you'll have a one-line solution.
There is no buit-in method in the Java API to do that.
Upvotes: 13