Преобразование двойного массива в Double ArrayList

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

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

Ниже мой код.

double [] firstValueArray ;

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

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

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

Справка:

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

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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

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