У меня есть m X n
двухмерный массив объекта say Foo
. Поэтому у меня есть Foo[][] foosArray
. Каким образом можно преобразовать это в List<Foo>
в Java?
Преобразовать двухмерный массив в список в java?
Ответ 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
Поскольку java-8
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
- Уменьшите поток в новый список