I\'m trying to convert a nested list into a 2d array.
List> list = new ArrayList<>();
list.add(Arrays.asList(\"a\", \"b\", \"
You could do this:
String[][] array = list.stream()
.map(l -> l.stream().toArray(String[]::new))
.toArray(String[][]::new);
It creates a Stream<List<String>>
from your list of lists, then from that uses map to replace each of the lists with an array of strings which results in a Stream<String[]>
, then finally calls toArray(with a generator function, instead of the no-parameter version) on that to produce the String[][]
.
This is the best and most efficient way to convert 2d list to 2d array;
List<List<Integer>> list2d = new ArrayList<>();
Integer[][] array2d;
array2d = list2d.stream().map(x->x.toArray(new Integer[x.size()])).toArray(Integer[][]::new);
There is no simple builtin way to do what you want because your list.toArray()
can return only array of elements stored in list which in your case would also be lists.
Simplest solution would be creating two dimensional array and filling it with results of toArray
from each of nested lists.
String[][] array = new String[list.size()][];
int i = 0;
for (List<String> nestedList : list) {
array[i++] = nestedList.toArray(new String[nestedList.size()]);
}
(you can shorten this code if you are using Java 8 with streams just like Alex did)
Slightly briefer than Alex's answer:
final List<List<String>> list = ...;
final String[][] array = list.stream().map(List::toArray).toArray(String[][]::new);