列表<列表<字符串>&GT; to String [] []

时间:2016-01-29 13:33:13

标签: java arrays

java中是否有任何转换

的快捷方式
List<List<String>> 

String[][]

? toArray不起作用:

List<List<String>> list = new ArrayList<>();
list.add(Collections.singletonList("test"));
String[][] array = list.toArray(new String[0][]);
System.out.println(array);

Exception in thread "main" java.lang.ArrayStoreException
    at java.lang.System.arraycopy(Native Method)
    at java.util.Arrays.copyOf(Arrays.java:3213)
    at java.util.ArrayList.toArray(ArrayList.java:407)
    at main(Api.java:1001)

这不是Convert nested list to 2d array的重复,因为我正在寻找快捷方式/ lib,而不是基本的实现

1 个答案:

答案 0 :(得分:4)

这里有一些Java 8 lambda:

// original List<List<String>>
List<List<String>> nestedList = new ArrayList<>();
// adding test values
nestedList.add(new ArrayList<String>(){{add("a");add("b");}});
nestedList.add(new ArrayList<String>(){{add("c");add("c");}});
nestedList.add(new ArrayList<String>(){{add("e");add("f");}});
// printing the original List<List<String>>
System.out.println(nestedList);
String[][] nestedArray = nestedList
    // using the stream API
    .stream()
    // mapping each `List`...
    .map(
        // ... to a resulting array
        (l) -> l.toArray(new String[l.size()])
    )
    // collecting as a List<String[]>
    .collect(Collectors.toList())
    // converting the resulting List<String[]> to a String[][]
    .toArray(new String[nestedList.size()][]);
// printing the resulting 2-dimensional array
System.out.println(Arrays.deepToString(nestedArray));

<强>输出

[[a, b], [c, c], [e, f]]
[[a, b], [c, c], [e, f]]