web-dev-qa-db-fra.com

Convertir ArrayList en tableau 2D contenant différentes longueurs de tableaux

Donc j'ai:

ArrayList<ArrayList<String>> 

Qui contient un nombre x d'ArrayLists qui contient un autre nombre y de chaînes. Pour démontrer:

Index 0:
  String 1
  String 2
  String 3
Index 1:
  String 4
Index 2:
Index 3:
  String 5
  String 6

Où index fait référence à l'index du tableau contenant une chaîne.

Comment puis-je transformer cela en un tableau 2D qui ressemble à:

{{String1, String2, String3},{String4}, {}, {String5, String6}}

Merci beaucoup.

16
Stefan Dunn
String[][] array = new String[arrayList.size()][];
for (int i = 0; i < arrayList.size(); i++) {
    ArrayList<String> row = arrayList.get(i);
    array[i] = row.toArray(new String[row.size()]);
}

arrayList est votre ArrayList<ArrayList<String>> (ou tout List<List<String>>, modifiez la première ligne de la boucle for en conséquence)

27
michele b

Vous pouvez utiliser la méthode toArray() pour convertir une liste de tableaux en un tableau. Comme vous avez ArrayList dans ArrayList, vous devrez parcourir chaque élément et appliquer cette méthode.

Quelque chose comme ça:-

ArrayList<ArrayList<String>> mainList = new ArrayList<ArrayList<String>>();
// populate this list here
//more code

// convert to an array of ArrayLists
ArrayList<String[]> tempList = new ArrayList<String[]>();
for (ArrayList<String> stringList : mainList){
    tempList.add((String[])stringList.toArray());
}

//Convert to array of arrays - 2D array
String [][]list = (String[][])tempList.toArray();

Vous pouvez en savoir plus sur toArray()ici.

5
vaisakh
ArrayList<ArrayList<String>> list= new ArrayList<ArrayList<String>>();
          ArrayList<String> a = new ArrayList<String>();
          ArrayList<String> b = new ArrayList<String>();
          a.add("Hello");
          b.add("Hell");
          list.add(a);
          list.add(b);
          Object[][] array = new Object[list.size()][];
          Iterator<ArrayList<String>> iterator = list.iterator();
          int i = 0;
          while(iterator.hasNext()){
              array[i] = iterator.next().toArray();
          }

Vous pouvez utiliser l'extrait de code ci-dessous pour convertir Object [] en String [].

String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
1
Chandra Sekhar

Par exemple:

public String[][] toArray(List<List<String>> list) {
    String[][] r = new String[list.size()][];
    int i = 0;
    for (List<String> next : list) {
       r[i++] = next.toArray(new String[next.size()]);
    }
    return r;
}
1
Eugene Retunsky

Ce mini code de programme complet répond à cette question de manière assez explicite. Il suffit de le coller et de le lancer:

import Java.util.ArrayList;
import Java.util.List;

public class ListTo2Darray {

    public String[][] toArray(List<List<?>> list) {
    String[][] r = new String[list.size()][];
    int i = 0;
    for (List<?> next : list) {
       r[i++] = next.toArray(new String[next.size()]);
    }
    return r;
}

    public static void main(String[]arg){
        String[][] sham;

        List<List<?>> mList = new ArrayList();

        List<String> a= new ArrayList();
        List<String> b= new ArrayList();
        a.add("a");  a.add("a");
        b.add("b");  b.add("b");
        mList.add(a); mList.add(b); 

        ListTo2Darray mt= new ListTo2Darray();
        sham=   mt.toArray(mList);

        System.out.println(sham[0][0]);
        System.out.println(sham[0][1]);
        System.out.println(sham[1][0]);
        System.out.println(sham[1][1]);
    }

}
0
Harjit Singh