web-dev-qa-db-fra.com

Comment convertir ArrayList en String [] en Java, Arraylist contient des objets VO

Aidez-moi à convertir ArrayList en chaîne []. ArrayList contient des valeurs de type Object (VO).

Par exemple,

Le problème est que je dois convertir une liste de pays en tableau de chaînes, la trier puis la mettre dans une liste. Cependant, je reçois une exception ClassCastException.

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

J'ai supposé que le nom de votre liste de pays est countryList.

Donc, pour convertir ArrayList de n'importe quelle classe en tableau, utilisez le code suivant. Convertissez T en classe dont vous souhaitez créer les tableaux.

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

S'il vous plaît, aidez-moi à convertir ArrayList en String [], ArrayList contient Values ​​Object (VO) comme Values.

Comme vous l'avez mentionné, cette liste contient un objet valeurs, c'est-à-dire votre propre classe, vous devez remplacer toString () pour que cela fonctionne correctement.

Ce code fonctionne. En supposant que VO est votre classe d'objets de valeur.

    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);

L'extrait de

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

vous donnera ArrayStoreException due VO n'est pas le type String comme requis par la méthode native arraycopy appelée par la suite depuis toArray one.

10
Viktor Stolbin

Dans le cas où votre ArrayList contient Strings, vous pouvez simplement utiliser la méthode toArray:

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

Si ce n'est pas le cas (comme votre question n'est pas complètement claire à ce sujet), vous devrez parcourir manuellement tous les éléments

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 );
}
7
Robin
String[] array = list.toArray(new String[list.size()]);

Que faisons-nous ici:

  • Le tableau String[] Est le tableau String dont vous avez besoin pour convertir votre ArrayList en
  • la liste est votre ArrayList des objets VO que vous avez en main
  • List#toArray(String[] object) est la méthode pour convertir des objets List en objets Array
4
GingerHead

Comme l'a suggéré correctement Viktor, j'ai modifié mon extrait de code.

Est une méthode dans ArrayList (toArray) comme:

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();
}

Ensuite, pour trier vous avez:

Arrays.sort(countries);

Puis reconvertir en liste comme ::

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

Avant Java 8, nous avons la possibilité d'itérer la liste et de remplir le tableau, mais avec Java 8, nous avons également la possibilité d'utiliser stream. Vérifiez le code suivant:

   //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);
2
i_am_zero