Подтвердить что ты не робот

Преобразовать двухмерный массив в список в java?

У меня есть m X n двухмерный массив объекта say Foo. Поэтому у меня есть Foo[][] foosArray. Каким образом можно преобразовать это в List<Foo> в Java?

4b9b3361

Ответ 1

Это хороший способ сделать это для любого двумерного массива, если вы хотите их в следующем порядке:

[[array [0] -elems], [array [1] elems]...]

public <T> List<T> twoDArrayToList(T[][] twoDArray) {
    List<T> list = new ArrayList<T>();
    for (T[] array : twoDArray) {
        list.addAll(Arrays.asList(array));
    }
    return list;
}

Ответ 2

for(int i=0;i<m;i++)
    for(int j=0;j<n;j++)
        yourList.add(foosArray[i][j]);

Я думаю, что другие трюки не нужны, потому что, во всяком случае, они будут использовать это решение.

Ответ 3

Поскольку

List<Foo> collection = Arrays.stream(array)  //'array' is two-dimensional
    .flatMap(Arrays::stream)
    .collect(Collectors.toList());

Ответ 4

Единственный способ превратить его в список - перебирать массив и строить список по ходу, например:

ArrayList<Foo[]> list = new ArrayList<Foo[]>(foosArray.length);
for(Foo[] foo: foosArray){
    list.add(foo);
}

Ответ 5

другой метод.

//converting 2D array to string
String temp = Arrays.deepToString(fooArr).replaceAll("\\[", "").replaceAll("\\]", "");
List<String> fooList = new ArrayList<>(Arrays.asList(","));

Ответ 6

Обратите внимание: при работе над преобразованием массивов в виде списка существует разница между примитивным массивом и массивом объектов. i.e) int [] и Integer []

например)

int [][] twoDArray = {     
        {1,  2,  3,  4,  40},
        {5,  6,  7,  8,  50},
        {9,  10, 11, 12, 60},
        {13, 14, 15, 16, 70},
        {17, 18, 19, 20, 80},
        {21, 22, 23, 24, 90},
        {25, 26, 27, 28, 100},
        {29, 30, 31, 32, 110},
        {33, 34, 35, 36, 120}};

List list = new ArrayList();
for (int[] array : twoDArray) {
    //This will add int[] object into the list, and not the int values.
    list.add(Arrays.asList(array));
}

и

Integer[][] twoDArray = {     
        {1,  2,  3,  4,  40},
        {5,  6,  7,  8,  50},
        {9,  10, 11, 12, 60},
        {13, 14, 15, 16, 70},
        {17, 18, 19, 20, 80},
        {21, 22, 23, 24, 90},
        {25, 26, 27, 28, 100},
        {29, 30, 31, 32, 110},
        {33, 34, 35, 36, 120}};

List list = new ArrayList();
for (Integer[] array : twoDArray) {
    //This will add int values into the new list 
    // and that list will added to the main list
    list.add(Arrays.asList(array));      
}

Чтобы работать над ответом Кеппиля; вам нужно преобразовать свой примитивный массив в массив объектов, используя Как преобразовать int [] в Integer [] в Java?

Повторно добавьте значения int по очереди в цикл normal.

int iLength = twoDArray.length;
List<List<Integer>> listOfLists = new ArrayList<>(iLength);
for (int i = 0; i < iLength; ++i) {
    int jLength = twoDArray[0].length;
    listOfLists.add(new ArrayList(jLength));
    for (int j = 0; j < jLength; ++j) {
      listOfLists.get(i).add(twoDArray[i][j]);
    }
}

Также обратите внимание, что массив Arrays.asList(массив) даст список фиксированного размера; поэтому размер не может быть изменен.

Ответ 7

Это можно сделать с помощью Java 8 stream API следующим образом:

String[][] dataSet = new String[][] {{...}, {...}, ...};
List<List<String> list = Arrays.stream(dataSet)
                               .map(Arrays::asList)
                               .collect(Collectors.toList());

В принципе, вы делаете три вещи:

  • Преобразование 2-мерного массива в поток
  • Сопоставьте каждый элемент в потоке (который должен быть массивом) в список с помощью API Array:: asList
  • Уменьшите поток в новый список