Преобразование списка в массив в Java

Как преобразовать List в Array в Java?

Проверьте код ниже:

 ArrayList tiendas; List tiendasList; tiendas = new ArrayList(); Resources res = this.getBaseContext().getResources(); XMLParser saxparser = new XMLParser(marca,res); tiendasList = saxparser.parse(marca,res); tiendas = tiendasList.toArray(); this.adaptador = new adaptadorMarca(this, R.layout.filamarca, tiendas); setListAdapter(this.adaptador); 

Мне нужно заполнить массив tiendas значениями tiendasList .

Или:

 Foo[] array = list.toArray(new Foo[list.size()]); 

или:

 Foo[] array = new Foo[list.size()]; list.toArray(array); // fill the array 

Обратите внимание, что это работает только для массивов ссылочных типов. Для массивов примитивных типов используйте традиционный способ:

 List list = ...; int[] array = new int[list.size()]; for(int i = 0; i < list.size(); i++) array[i] = list.get(i); 

Альтернатива в Java 8:

 String[] strings = list.stream().toArray(String[]::new); 

Я думаю, что это самый простой способ:

 Foo[] array = list.toArray(new Foo[0]); 

Я натолкнулся на этот fragment кода, который его решает.

 //Creating a sample ArrayList List list = new ArrayList(); //Adding some long type values list.add(100l); list.add(200l); list.add(300l); //Converting the ArrayList to a Long Long[] array = (Long[]) list.toArray(new Long[list.size()]); //Printing the results System.out.println(array[0] + " " + array[1] + " " + array[2]); 

Преобразование работает следующим образом:

  1. Он создает новый длинный массив с размером исходного списка
  2. Он преобразует исходный массив ArrayList в массив, используя вновь созданный
  3. Он передает этот массив в длинный массив (Long []), который я назвал «массив»,

Для ArrayList следующие работы:

 ArrayList list = new ArrayList(); //... add values Foo[] resultArray = new Foo[list.size()]; resultArray = list.toArray(resultArray); 

Пример, взятый на этой странице: http://www.java-examples.com/copy-all-elements-java-arraylist-object-array-example

 import java.util.ArrayList; public class CopyElementsOfArrayListToArrayExample { public static void main(String[] args) { //create an ArrayList object ArrayList arrayList = new ArrayList(); //Add elements to ArrayList arrayList.add("1"); arrayList.add("2"); arrayList.add("3"); arrayList.add("4"); arrayList.add("5"); /* To copy all elements of java ArrayList object into array use Object[] toArray() method. */ Object[] objArray = arrayList.toArray(); //display contents of Object array System.out.println("ArrayList elements are copied into an Array. Now Array Contains.."); for(int index=0; index < objArray.length ; index++) System.out.println(objArray[index]); } } /* Output would be ArrayList elements are copied into an Array. Now Array Contains.. 1 2 3 4 5 

Это работы. Вид.

 public static Object[] toArray(List a) { Object[] arr = new Object[a.size()]; for (int i = 0; i < a.size(); i++) arr[i] = a.get(i); return arr; } 

Тогда основной метод.

 public static void main(String[] args) { List list = new ArrayList() {{ add("hello"); add("world"); }}; Object[] arr = toArray(list); System.out.println(arr[0]); } 

Лучшее, что я придумал без Java 8, было:

 public static  T[] toArray(List list, Class objectClass) { if (list == null) { return null; } T[] listAsArray = (T[]) Array.newInstance(objectClass, list.size()); list.toArray(listAsArray); return listAsArray; } 

Если у кого-то есть лучший способ сделать это, пожалуйста, поделитесь 🙂

Это (ответ Ондре):

 Foo[] array = list.toArray(new Foo[0]); 

Является самым распространенным идиомом, который я вижу. Те, кто предполагает, что вы используете фактический размер списка вместо «0», не понимают, что здесь происходит. Вызов toArray не заботится о размере или содержимом данного массива – ему нужен только его тип. Было бы лучше, если бы он взял фактический тип, в этом случае «Foo.class» было бы намного понятнее. Да, эта идиома генерирует фиктивный объект, но в том числе размер списка просто означает, что вы создаете более крупный фиктивный объект. Опять же, объект не используется каким-либо образом; это только тот тип, который необходим.

Вы можете использовать toArray () api следующим образом:

 ArrayList stringList = new ArrayList(); stringList.add("ListItem1"); stringList.add("ListItem2"); String[] stringArray = new String[stringList.size()]; stringArray = stringList.toArray(stringList); 

Значения из массива,

 for(String value : stringList) { System.out.println(value); } 
 tiendas = new ArrayList(tiendasList); 

Все реализации коллекции имеют перегруженный конструктор, который берет другую коллекцию (с шаблоном соответствия). Новый экземпляр создается вместе с переданной коллекцией.

Попробуй это:

 List list = new ArrayList(); list.add("Apple"); list.add("Banana"); Object[] ol = list.toArray(); 
  • Постоянный куки для Android HttpClient
  • java.lang.ClassCastException
  • Изменить положение кнопки «Мое местоположение» в Google Maps API
  • Как вызвать веб-службу RESTful с Android?
  • Android Не удалось создать экземпляр активности: не нашел class на пути
  • Как узнать использование памяти моего приложения в Android?
  • НЕОПРЕДЕЛЕННОЕ ТОП-УРОВЕННОЕ ИСКЛЮЧЕНИЕ: com.android.dex.DexException: несколько файлов dex определяют
  • Как передать функцию в качестве параметра в Java?
  • Как вызвать метод после задержки в Android
  • Не удается разрешить символ «GoogleCloudMessaging» GCM
  • Можем ли мы подключить удаленную базу данных MySQL на Android с помощью JDBC?
  • Interesting Posts

    Какие приложения WPF реального мира существуют?

    Что это за странное поведение двоеточия Python?

    Как я могу ссылаться на свой Java Enum без указания его типа

    Добавить строки из-за использования общей ошибки ‘extends’ вызывает ошибку компилятора

    Что будет форматировать C: \ do?

    В чем разница между 64-битными и 32-разрядными операционными системами?

    Сообщение об ошибке при запуске терминала

    Как определить установленную версию MS-Office?

    Изменение цвета фона вкладки TabLayout (библиотека поддержки дизайна Android) не занимает все пространство вкладки

    Как мультяшное изображение программно?

    Синхронизированный аудиовыход на нескольких компьютерах? VLC? Аппаратные решения?

    Является ли std :: vector копированием объектов с помощью push_back?

    Outlook – как префикс исходного содержимого электронной почты с некоторым символом, отвечая на это письмо

    Как сериализовать словарь через WCF?

    Rails form_for: remote => true не вызывает метод js

    Давайте будем гением компьютера.