Как преобразовать ArrayList в String [] в java, Arraylist содержит объекты VO

Пожалуйста, помогите мне преобразовать ArrayList в String []. ArrayList содержит значения типа Object (VO).

Например,

Проблема в том, что мне нужно преобразовать список стран в String Array, отсортировать его и затем поместить в список. Однако я получаю исключение ClassCastException.

Ответы

Ответ 1

String [] countriesArray = countryList.toArray(new String[countryList.size()]);

Я предположил, что название вашей страны countryList.

Итак, чтобы преобразовать ArrayList любого класса в массив, используйте следующий код. Преобразуйте T в класс, массивы которого вы хотите создать.

List<T> list = new ArrayList<T>();    
T [] countries = list.toArray(new T[list.size()]);

Ответ 2

Пожалуйста, помогите мне преобразовать ArrayList в String [], ArrayList Содержит Значения Объект (VO) как значения.

Как вы упомянули, этот список содержит объект значений, то есть ваш собственный класс, для которого требуется toString() переопределить, чтобы сделать эту работу корректной.

Этот код работает. Предполагая, что VO - это ваш класс Object Object.

    List<VO> listOfValueObject = new ArrayList<VO>();
    listOfValueObject.add(new VO());
    String[] result = new String[listOfValueObject.size()];
    for (int i = 0; i < listOfValueObject.size(); i++) {
        result[i] = listOfValueObject.get(i).toString();
    }
    Arrays.sort(result);
    List<String> sortedList = Arrays.asList(result);

Отрывок из

    List<VO> listOfValueObject = new ArrayList<VO>();
    listOfValueObject.add(new VO());
    String[] countriesArray = listOfValueObject.toArray(new String[listOfValueObject.size()]);

даст вам ArrayStoreException due VO не тип String, как требуется встроенным методом arraycopy, впоследствии вызванным из toArray one.

Ответ 3

Если ваш ArrayList содержит String s, вы можете просто использовать метод toArray:

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

Если это не так (поскольку ваш вопрос не совсем ясен), вам придется вручную перебрать все элементы

List<MyRandomObject> list;
String[] array = new String[list.size() ];
for( int i = 0; i < list.size(); i++ ){
  MyRandomObject listElement = list.get(i);
  array[i] = convertObjectToString( listElement );
}

Ответ 4

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

Что мы здесь делаем:

  • String[] array - это массив String, который необходимо преобразовать ArrayList to
  • - ваш ArrayList объектов VO, которые у вас есть.
  • List#toArray(String[] object) - это метод преобразования объектов List к объектам Array

Ответ 5

Как правильно предложил Виктор, я отредактировал свой фрагмент.

Это метод в ArrayList (toArray), например:

List<VO> listOfValueObject // is your value object
String[] countries  = new String[listOfValueObject.size()];
for (int i = 0; i < listOfValueObject.size(); i++) {
    countries[i] = listOfValueObject.get(i).toString();
}

Затем для сортировки у вас есть:

Arrays.sort(countries);

Затем переконвертируется в List как::

List<String> countryList = Arrays.asList(countries);

Ответ 6

До Java 8 у нас есть возможность итерации списка и заполнения массива, но с Java 8 мы также можем использовать поток. Проверьте следующий код:

   //Populate few country objects where Country class stores name of country in field name.
    List<Country> countries  = new ArrayList<>();
    countries.add(new Country("India"));
    countries.add(new Country("USA"));
    countries.add(new Country("Japan"));

    // Iterate over list
    String[] countryArray = new String[countries.size()];
    int index = 0;
    for (Country country : countries) {
        countryArray[index] = country.getName();
        index++;
    }

    // Java 8 has option of streams to get same size array
    String[] stringArrayUsingStream = countries.stream().map(c->c.getName()).toArray(String[]::new);