it-roy-ru.com

Преобразовать двойной массив в двойной ArrayList

Когда я пытаюсь преобразовать двойной массив в Double arrayList, я получил следующую ошибку:

Исключение в потоке "main" Java.lang.ClassCastException: [D не может быть приведено к Java.lang.Double

Ниже мой код.

double [] firstValueArray ;

ArrayList <Double> firstValueList = new ArrayList (Arrays.asList(firstValueArray));

Я сравниваю этот список с другим списком и присваиваю результат другой двойной переменной.

Пожалуйста, дайте мне знать причину этой ошибки.

16
gishara

Увы, Arrays.asList(..) не работает с примитивами. Apache Commons-Lang имеет 

Double[] doubleArray = ArrayUtils.toObject(durationValueArray);
List<Double> list = Arrays.asList(doubleArray);
30
Bozho

Guava версия еще короче:

List<Double> list = Doubles.asList(doubleArray);

Ссылка:

Примечание: Это метод varargs. Все методы varargs могут быть вызваны с использованием массива одного типа (но не соответствующего типа в штучной упаковке/без коробки !!). Эти два вызова эквивалентны:

Doubles.asList(new double[]{1d,2d});
Doubles.asList(1d,2d);

Кроме того, версия Guava не выполняет полный обход, это живое представление списка массива примитивов, преобразующее примитивы в объекты только при обращении к ним.

20
Sean Patrick Floyd

Используя Java 8 Streams API, это достигается с помощью 

DoubleStream.of(doublesArray).boxed().collect(Collectors.toList());

Если требуется возврат ArrayList в качестве реализации, используйте

DoubleStream.of(doublesArray).boxed().collect(Collectors.toCollection(ArrayList::new));

Этот однострочник не требует никаких дополнительных библиотек.

15
SpaceTrucker

Благодарим Bestsss за комментарий, который должен быть ответом:

ArrayList<Double> firstValueList = new ArrayList<Double>();
for(double d : firstValueArray) firstValueList.add(d);
3
matt2000

... или с Java 1.7:

double[] firstValueArray = new double[] {1.0, 2.0, 3.0};

ArrayList<Double> list = DoubleStream.of( firstValueArray ).boxed().collect(
    Collectors.toCollection( new Supplier<ArrayList<Double>>() {
      public ArrayList<Double> get() {
        return( new ArrayList<Double>() );
      }
    } ) );
0
Kaplan