What about using Java8's streams ?
data.stream()
.map(il -> il.stream().toArray(size -> new Integer[size]))
// OR THIS .map(il -> il.toArray(new Integer[0]))
.toArray(size -> new Integer[size][]);
- stream - do something like iterator and goes through all elements (all Lists)
- map - transfer element (List) into what you want (Array[]). While List could be streamed you do same, but you could use Arrays
- toArray - you transfer you stream and finalize it.
Here is whole Main method with some example data
public static void main(String[] args) {
List<List<Integer>> data = new ArrayList<>();
data.add(Arrays.asList(10, 11, 12, 13));
data.add(Arrays.asList(20, 21, 22, 23));
Integer[][] result = data.stream()
.map(il -> il.toArray(new Integer[0]))
.toArray(size -> new Integer[size][]);
}