以编程方式创建2D数组列表,然后从中创建单个数组列表



在java中编程创建2D数组列表,然后从中创建单个数组列表

我有一个5个整数的ArrayList<Integer> IntegerArraylist{1,2,3,4,5};

基于此,我必须创建2D数组列表,如:

ArrayList<ArrayList<String>> StringArraylist;

:

{{a}, {b, c, d, e, f}, {g, h}, {i, j, k}, {l}}

基于此,我必须将其转换为单个数组列表,如下所示:

{a, b, c, d, e, f, g, h, i, j, k, l}

我们该怎么做?

List<String> list = new ArrayList<String>();
for (String[] array : YOUR_2D_ARRAY) {
list.addAll(Arrays.asList(array));

可以将streamsflatMap同时使用

Stream<String> oneDStream = StringArraylist.stream().flatMap((Function<ArrayList<String>, Stream<String>>) strings -> strings.stream());
List<String> oneDList = oneDStream.collect(Collectors.toList());
oneDList.forEach(s -> {
System.out.print(" "+ s);
});

我认为最简单的方法是使用StreamAPI

public static void main(String[] args) {
String[][] arr = {
{"a"},
{"b", "c", "d", "e", "f"},
{"g", "h"}
// and so on
};
List<List<String>> stringArraylist = Arrays.stream(arr)
.map(Arrays::asList)
.collect(Collectors.toList());

List<String> merged = stringArraylist.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
System.out.println(merged);
}

或者,简单使用for-each循环:

List<String> merged = new ArrayList<>();
for(List<String> list : stringArraylist) {
merged.addAll(list);
}

请注意,您需要使用List接口,而不是ArrayList实现。

最新更新