如何将不同类型的 ArrayLists 添加到数组中



我有 4 个字符串类型的 ArrayList 称为 A,B,C,D,我想将它们添加到一个数组中。这是我到目前为止尝试过的,但它不起作用。

String[] finalWords = new String[]{A,B,C,D};

您可以将列表添加到List<List<String>>,然后使用Stream#flatMap将列表平展为单个List,您可以在其中转换为数组,如下所示:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(final String[] args) {
List<String> list1 = List.of("a1", "a2", "a3");
List<String> list2 = List.of("b1", "b2", "b3");
List<String> list3 = List.of("c1", "c2", "c3");
List<String> list4 = List.of("d1", "d2", "d3");
List<List<String>> listOfLists = List.of(list1, list2, list3, list4);
String[] finalWords = listOfLists
.stream()
.flatMap(list -> list.stream())
.collect(Collectors.toList())
.toArray(String[]::new);

System.out.println(Arrays.toString(finalWords));
}
}

输出:

[a1, a2, a3, b1, b2, b3, c1, c2, c3, d1, d2, d3]

[更新]由厄立特里亚人提供

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(final String[] args) {
List<String> list1 = List.of("a1", "a2", "a3");
List<String> list2 = List.of("b1", "b2", "b3");
List<String> list3 = List.of("c1", "c2", "c3");
List<String> list4 = List.of("d1", "d2", "d3");
String[] finalWords = Stream.of(list1, list2, list3, list4)
.flatMap(list -> list.stream())
.collect(Collectors.toList())
.toArray(String[]::new);

System.out.println(Arrays.toString(finalWords));
}
}

尽管我抓住了利用java.util.stream.Stream机会的机会,但没有这个狡猾的 vararg 成语<T> List<T>[] toArray(List<T> ... lists){…},关于参数化类型数组的答案是不完整的......

import java.util.*;
import java.lang.*;
import java.io.*;
import static java.util.List.of;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
List<String> A = of("a", "ah", "A", "ay");
List<String> B = of("B", "b", "bee", "Bea");
List<String> C = of("sea", "Cee", "C++", "c", "Si", "C#");
List<String> D = of("D", "d", "dee", "Di", "Dee-Dee Ramone", "Sunny D");

List<Number> N1 = of(777);
List<Number> N2 = of(-93.11D);
List<Number> N3 = of(867.5f);
List<Number> N4 = of(-309L);

List<String>[] litzs = toArray(A, B, C, D);

List<Number>[] nzs = toArray(N1, N2, N3, N4);

/*...use them however...*/  
}

private static <T> List<T>[] toArray(List<T> ... lists){ 
return lists;
}
}

这可能不是约书亚·布洛赫(Joshua Bloch(会认可的。但这是一个非常整洁的小技巧,是一样的。

你也可以试试这种方式

List<String> finalList = new ArrayList<>();
Stream.of(A,B,C,D).forEach(finalList::addAll);
String[] finalWords = finalList.toArray(new String[0]);

您可以将它们存储在 ArrayList 中。

如果您的 ArrayList 属于同一类型的字符串,则

List<List<String>> finalWords = new ArrayList();
finalWords.add(A);
finalWords.add(B);
finalWords.add(C);
finalWords.add(D);

如果它们属于不同的类型,请将上面的"字符串"类型替换为"对象"。 但请记住,您必须强制转换它们才能读取其正确的类型。