If instead of a primitive type you had an array of objects the solution would have been pretty easy. In the Arrays utility class there is a method exactly tailored for this use, asList(), that creates a new ArrayList collection out of a passed array. But in this case you have to work a bit more.
Firstly, let's see how Arrays.asList() works:
String[] sa = { "one", "two", "three" }; Collection<String> sc = Arrays.asList(sa); // 1 System.out.println("Max is: " + Collections.max(sc)); // 21. As promised, it was very easy indeed.
2. And now we can use the utility methods!
It is a pity, but we can't do the same for an array of primitive values:
double[] da = { 1d, 2d, 3d }; Collection<Double> dl = Arrays.asList(da); // 1 !!! error !!!1. Sadly we have a "Type mismatch: cannot convert from List<double[]> to List<Double>".
Here autoboxing (that useful feature available from Java 1.5 that automatically converts any primitive type to its matching wrapper type) is not working, and for a good reason: performance for huge array conversions. If you really need to box an array of primitives you have to do it explicitly.
Collection<Double> dl = new ArrayList<Double>(da.length); for(double d : da) dl.add(d); Double max = Collections.max(dl); System.out.println("Max is: " + max);
No comments:
Post a Comment