Java array to primitive array

How to convert Wrapper value array list into primitive array in Java?

Here, to convert Wrapper value array list into primitive array, we are considering Integer as Wrapper, whereas double as primitive.

At first, declare an Integer array list and add elements to it −

ArrayList < Integer >arrList = new ArrayList < Integer >(); arrList.add(5); arrList.add(10); arrList.add(15); arrList.add(20); arrList.add(25); arrList.add(30); arrList.add(45); arrList.add(50);

Now, convert the above Integer array list to primitive array. Firstly, we set the same size for the double array and then assigned each value

final double[] arr = new double[arrList.size()]; int index = 0; for (final Integer value: arrList)

The following is an example to convert an Integer (wrapper) array list into a double array (primitive) −

Example

import java.util.ArrayList; public class Demo < public static void main(String[] args) < ArrayListarrList = new ArrayList(); arrList.add(5); arrList.add(10); arrList.add(15); arrList.add(20); arrList.add(25); arrList.add(30); arrList.add(45); arrList.add(50); final double[] arr = new double[arrList.size()]; int index = 0; for (final Integer value: arrList) < arr[index++] = value; >System.out.println("Elements of double array. "); for (Double i: arr) < System.out.println(i); >> >

output

Elements of double array. 5.0 10.0 15.0 20.0 25.0 30.0 45.0 50.0

Samual Sam

Learning faster. Every day.

Источник

Convert Between Array of Primitives and Array of Objects

Learn to convert an array of primitives ( int , long or double ) to an array of objects ( Integer , Double or Long ), and vice versa. For example, we will convert int[] to Integer[] and then convert back the Integer[] to int[] .

Note that all the techniques follow the same logic for the conversion process i.e. iterate over the existing array, convert the current item to object (or primitive) and add to the new array. The APIs discussed below add the syntactic sugar to make the code more readable.

1. Converting using the Stream API

We need to use the Stream.toArray() method that returns an array containing the items from a given stream. We need to convert the item type before collecting it into the new array.

1.1. Primitive Array to Object Array

Java program to convert the int[] to Integer[]. Note that, by default, toArray() method returns the Object[] so specifying the generator function Integer[]::new is important.

int[] primitiveArray = new int[]; Integer[] outputArray = Arrays.stream(primitiveArray) .boxed() .toArray(Integer[]::new); 

1.2. Object Array to Primitive Array

Java program to convert the Integer[] to int[]. To convert the Integer object to int value, we are using the stream.mapToInt() function. This method returns an IntStream consisting of the int values corresponding to the Integer objects in the array.

If there are null items in the array then this method will throw NullPointerException.

Integer[] objectArray = new Integer[]; int[] outputArray = Arrays.stream(objectArray) .mapToInt(Integer::intValue) .toArray();

2. Converting using Apache Common’s ArrayUtils

The ArrayUtils class has many static utility methods to perform common tasks in a single statement. It improves the code readability and thus it is easy to maintain such code.

Bothe methods internally use the for-loop for iterating over the original array and populating the new array, so performance-wise you will see much difference as compared to using the Stream API.

 org.apache.commons commons-lang3 3.12.0 

2.1. Primitive Array to Object Array

The ArrayUtils.toObject() method converts an array of primitives to an array of objects. The method returns null for a null input array.

int[] primitiveArray = new int[]; Integer[] outputArray = ArrayUtils.toObject(primitiveArray);

2.2. Object Array to Primitive Array

The ArrayUtils.toPrimitive() method converts an array of objects to an array of corresponding primitives. This method throws NullPointerException if array content is null.

Integer[] objectArray = new Integer[]; int[] outputArray = ArrayUtils.toPrimitive(objectArray);

In this simple Java tutorial, we learned to convert primitive arrays to object arrays, and converted object arrays to primitive arrays. We learned to use the Java Streams API and Apache Common’s ArrayUtils class for it.

Источник

Преобразование массива объектов в массив их примитивных типов

Если у вас есть массив объектов Java, которые имеют примитивный тип (например, Byte, Integer, Char и т. Д.). Есть ли изящный способ преобразовать его в массив примитивного типа? В частности, это можно сделать, не создавая новый массив и не просматривая его содержимое. Так, например, учитывая

К сожалению, это то, что нам приходится делать довольно часто при взаимодействии между Hibernate и некоторыми сторонними библиотеками, над которыми мы не можем контролировать. Кажется, это будет довольно распространенная операция, поэтому я был бы удивлен, если бы не было ярлыка. Спасибо за вашу помощь!

Ответы (8)

К сожалению, в платформе Java нет ничего, что позволяло бы это делать. Кстати, вам также необходимо явно обрабатывать null элементы в массиве Integer[] (какой int вы собираетесь использовать для них?).

Хорошее замечание о нулях. Для моих целей я бы принял исключение, генерируемое, если одна из записей имеет значение null, точно так же, как возникает исключение NullPointerException, когда вы распаковываете объект. — person Il-Bhima; 19.02.2009

Еще раз, Apache Commons Lang — ваш друг. Они предоставляют ArrayUtils.toPrimitive (), который делает именно то, что вам нужно. Вы можете указать, как вы хотите обрабатывать значения NULL.

int[] intArray = Arrays.stream(array).mapToInt(Integer::intValue).toArray(); 

Однако в настоящее время существуют только примитивные потоки для int , long и double . Если вам нужно преобразовать в другой примитивный тип, такой как byte , самый короткий путь без внешней библиотеки:

byte[] byteArray = new byte[array.length]; for(int i = 0; i < array.length; i++) byteArray[i] = array[i]; 
IntStream.range(0, array.length).forEach(i -> byteArray[i] = array[i]); 

Вместо Integer::intValue вы также можете использовать i -> i (который использует распаковку). - person robinst; 18.06.2015

@robinst А распаковка - это компилятор, вызывающий Integer::intValue для вас, так зачем создавать новую лямбду, когда метод легко доступен? - person Andreas; 12.05.2016

@Andreas Просто перечислю еще один вариант, который вы выберете, это вопрос стиля кода / личных предпочтений. Я также провел микробенчмаркинг (используя JMH) для двух подходов, и они показали одинаковую производительность. - person robinst; 17.05.2016

Использование первого размещенного фрагмента кода дало мне ошибку «Невозможно использовать нестатический метод в статическом контексте», поэтому я вместо этого сделал: int[] ints = Arrays.stream(objects).mapToInt(i -> Integer.parseInt(i.toString())).toArray(); Надеюсь, это будет полезно для всех, у кого такая же проблема. И если кто-нибудь знает способ получше, дайте мне знать. - person Kartik Chugh; 25.07.2019

В настоящее время это должен быть принятый ответ. Спасибо, Алекс. - person Per Lundberg; 24.02.2020

int[] intArray = Ints.toArray(Arrays.asList(array)); 

В частности, это можно сделать, не создавая новый массив и не просматривая его содержимое.

Вы не можете преобразовать массив Integer в int (т.е. вы не можете изменить тип элементов массива) в Java. Таким образом, вы должны либо создать новый массив int [] и скопировать в него значение объектов Integer, либо использовать адаптер:

class IntAdapter < private Integer[] array; public IntAdapter (Integer[] array) < this.array = array; >public int get (int index) < return array[index].intValue(); >> 

Это может сделать ваш код более читабельным, а объект IntAdapter будет использовать только несколько байтов памяти. Большим преимуществом адаптера является то, что здесь вы можете обрабатывать особые случаи:

class IntAdapter < private Integer[] array; public int nullValue = 0; public IntAdapter (Integer[] array) < this.array = array; >public int get (int index) < return array[index] == null ? nullValue : array[index].intValue(); >> 

Другое решение - использовать Commons Primitives, который содержит множество предопределенных адаптеров. В вашем случае посмотрите ListIntList.

Или просто сделайте это простым способом, если собираетесь сделать это только один раз. Но вы не говорили о случае Integer! = Null.

 //array is the Integer array int[] array2 = new int[array.length]; int i=0; for (Integer integer : array)

Использование доллара очень просто:

Integer[] array = . ; int[] primitiveArray = $(array).toIntArray(); 

Вот общее решение для всех примитивных типов

/** * Convert Collection to equivalent array of primitive type * @param [in] Object type of source collection * @param tcls [in] class of the primitive element * @param q [in] source collection * @return Equivalent Array of tcls-elements, requires cast to "tcls"[] */ public static Object asPrimitiveArray(Class tcls, Collection q) < int n = q.size(); Object res = Array.newInstance(tcls, n); Iteratori = q.iterator(); int j = 0; while (i.hasNext()) < Array.set(res, j++, i.next()); >return res; > /** * Convert Object array to equivalent array of primitive type * @param [in] Object type of source array * @param tcls [in] class of the primitive element * @param s [in] source array * @return Equivalent Array of tcls-elements, requires cast to "tcls"[] */ public static Object asPrimitiveArray(Class tcls, S[] s)

Для преобразования целого числа в целое

Integer[] a = . int[] t = (int[]) asPrimitiveArray(int.class, a); 

Источник

Из массива объектов в массив примитивов

У меня имеется простой класс Point с двумя параметрами — double x и double y;
Есть ли быстрый способ (именно быстрый, мне нужен именно выигрыш в скорости), чтобы перевести массив типа Point[] в массив вида [[x1,y1],[x2,y2]. [xN,yN]]?

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

Преобразование массива примитивов в массив оболочек типа и наоборот
Знаю, что с массивами автоматическая упвковка и распаковка не работает. Существует ли метод для.

Как собрать из массива ключей и массива объектов - массив объектов?
Как собрать из массива ключей и массива обьектов - массив объектов? // Массив ключей ; //.

Jasmine. Имеется массив из N объектов , необходимо проверить, что какие-то M объектов входят в этот массив
Имеется массив из N объектов , необходимо проверить, что какие-то M объектов входят в этот массив.

Лучший ответ

Сообщение было отмечено TseL как решение

Решение

double[][] arr = new double[5][2]; Arrays.stream(points).map(p -> new double[] { p.getX(), p.getY() }).collect(Collectors.toList()).toArray(arr);
[[x1,y1],[x2,y2]. [xN,yN]] - а вот эти скобочки вложенные что обозначают? это вложенные массивы или просто для визуального выделения пар элементов в одномерном массиве?

и ток потом у List вызвать метод toArray

Добавлено через 1 минуту
Lumber, просто двумерные массивы так выводятся на печать. Можете считать, что скобок нет

Добавлено через 3 минуты
двумерный массив эт тип массив, состоящий из массивов, поэтому при выводе так выделяется каждый ряд, т.е. чтоб обратиться к Х и У первой точки, например, надо получить значения arr[0][0] и arr[0][1] и т.д.

ЦитатаСообщение от Gungala Посмотреть сообщение

я не уверен что автору темы нужен двумерный массив, он пишет нужен выигрыш по скорости, а массив массивов не даст никакого выигрыша по сравнению с массивом Point (это практически тоже самое в памяти). Вот если всё в одномерный double массив запихнуть.

Но может ему нужна только быстрая конвертация массива, а не быстрая работа с получившимися данными.

Lumber, балин, я твоё сообщение увидел и подумал, что ты ТС и тип не понимаешь что эт за скобки, поэтому начал всю эту хрень объяснять. Ох, надо идти спать

Я думаю, что всё-таки имелся ввиду двумерный массив. Он же не уточнил для каких целей ему эт надо. Возможно, в какой-то ситуации так получится. ам. выиграть скорость

Источник

Читайте также:  Php create с extension
Оцените статью