我有兩個List<List<String>>,想將它們連接起來。
這是我的代碼:
List<List<String>> a = Arrays.asList(Arrays.asList("a", "b", "c"));
List<List<String>> b = Arrays.asList(Arrays.asList("d", "e", "f"));
a.addAll(b);
但是,它不起作用并引發例外。
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at java.util.AbstractCollection.addAll(AbstractCollection.java:344)
下面的代碼有效:
List<List<String>> a = new ArrayList<>();
a.add(Arrays.asList("a", "b", "c"));
List<List<String>> b = new ArrayList<>();
b.add(Arrays.asList("d", "e", "f"));
a.addAll(b);
這里有什么區別?
uj5u.com熱心網友回復:
a.addAll(b)只要外部串列 a是可變的并且您不介意修改它,您的嘗試就可以作業。
可變外部串列:
List<List<String>> a = new ArrayList<>(List.of(
List.of("a", "b", "c"),
List.of("d", "e", "f")));
List<List<String>> b = new ArrayList<>(List.of(
List.of("h", "i", "j"),
List.of("k", "l", "m")));
a.addAll(b); // the 'a' will contain all the inner lists
a.forEach(System.out::println);
不可變的外部串列
如果您想保留前者a和b串列和/或產生一個新的,請使用java流:
List<List<String>> a = List.of(
List.of("a", "b", "c"),
List.of("d", "e", "f"));
List<List<String>> b = List.of(
List.of("h", "i", "j"),
List.of("k", "l", "m"));
List<List<String>> result = Stream.of(a, b)
.flatMap(Collection::stream)
.collect(Collectors.toList());
result.forEach(System.out::println);
結果
兩種方式共享相同的輸出:
[a, b, c] [d, e, f] [h, i, j] [k, l, m]
對于這種組合,內部串列是否不可變并不重要。
uj5u.com熱心網友回復:
您的代碼不起作用,因為Arrays.asList()回傳
由指定陣列支持的固定大小串列
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html#asList(T...)
這意味著當您嘗試添加更多元素時,陣列中沒有空間表示List; 因此拋出一個UnsupportedOperationException.
如果您想List使用特定元素構建并且還能夠擴展其大小,那么您應該通過向其提供asList()方法回傳的串列來使用類的轉換建構式。
List<List<String>> a = new ArrayList<>(Arrays.asList(new ArrayList<>(Arrays.asList("a", "b", "c"))));
List<List<String>> b = new ArrayList<>(Arrays.asList(new ArrayList<>(Arrays.asList("d", "e", "f"))));
a.addAll(b);
這樣,您的外部和內部串列都將表現得像一個實際的串列,而不會在超過原始大小時List拋出一個。UnsupportedOperationException
uj5u.com熱心網友回復:
您可以避免使用 addAll 函式并遍歷 b 并添加到如下所示的 a:
for(innerList:b){
a.add(innerList);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/483807.html
上一篇:回圈陣列中的多個陣列
下一篇:商店中的物品數量Java
