#java
#java
Вопрос:
Я искал решение для преобразования ArrayList в double[] array . Прочитав несколько вопросов по той же проблеме, я нахожу решение. Вот как я сейчас работаю.
public static double[] listToArray(List<Double> arr){
double[] result = new double[arr.size()];
Iterator<Double> itr = arr.iterator();
int i = 0 ;
while(itr.hasNext()){
try{
result[i] = Double.parseDouble(itr.next().toString());
i ;
}catch(IndexOutOfBoundsException e){
System.out.println("OutOfBouds");
}
}
return resu<
}
Это довольно неприятный способ. Я знаю, что есть некоторые API, которые могут делать то, что я хочу. Но в этом случае я привнесу дополнительную сложность в свой проект, а это не то, что я хочу видеть. Кто-нибудь может дать мне лучшее решение??
Комментарии:
1. По какой-либо причине вы не использовали
ArrayList#toArray()
?2. Это приведет к созданию двойного (не двойного) массива.
3. Это дает Double[] , а не double[]
4. Я знаю об этом, это только первый шаг.
5. точно, я трачу некоторое время на то, чтобы попробовать этот способ, но в конце концов обнаружил, что массив Double[] не может быть преобразован в double[] таким образом.
Ответ №1:
public static double[] listToArray(List<Double> arr){
double[] result = new double[arr.size()];
int i = 0;
for(Double d : arr) {
result[i ] = d.doubleValue();
}
return resu<
}
Комментарии:
1. Это мелочь, для этого нет стандартной библиотеки Java или языковой функциональности. Однако использовать приведенный выше код довольно просто.
Ответ №2:
Ну, есть: .toArray()
но это даст вам массив двойных объектов.
Попробуйте:
ArrayList<Double> objList;
double[] primList = new double[objList.size()];
for (int i =0; i < objList.size(); i)
primList[i] = objList.get(i);
Ответ №3:
double[] test(final List<Double> sourcelist) {
if (sourcelist==null) {
return null;
}
double[] array = new double[sourcelist.size()];
int i = 0;
for (Double value : sourcelist) {
if (value == null) {
array[i ] = 0D; // or some other null representation
} else {
array[i ] = value.doubleValue();
}
}
return array;
}
Ответ №4:
Вот как Apache Commons Lang делает это
org.apache.commons.lang.ArrayUtils:
public static double[] toPrimitive(Double[] array) {
if (array == null) {
return null;
} else if (array.length == 0) {
return EMPTY_DOUBLE_ARRAY;
}
final double[] result = new double[array.length];
for (int i = 0; i < array.length; i ) {
result[i] = array[i].doubleValue();
}
return resu<
}