如何在 Java 中將字串陣列新增至 ArrayList
1. 概述
在Java中, ArrayList是常用的List實作。在某些情況下,我們可能需要將多個String陣列中的元素加入到ArrayList.
在這個快速教程中,我們將探討如何有效地完成此任務。
2.問題介紹
在深入研究程式碼之前,讓我們透過一個範例快速了解問題。
假設我們有三個String陣列:
final static String[] ARRAY1 = { "Java", "Kotlin", "Sql", "Javascript" };
final static String[] ARRAY2 = { "C", "C++", "C#", "Typescript" };
final static String[] ARRAY3 = { "Python", "Ruby", "Go", "Rust" };
此外,我們還有一種方法可以產生包含兩個String元素的String List :
List<String> initLanguageList() {
List<String> languageList = new ArrayList<>();
languageList.add("Languages");
languageList.add(":");
return languageList;
}
如果我們正確地將三個陣列中的String元素依序加入initLanguageList()產生的List中,我們預期會得到一個包含以下元素的List :
final static List<String> EXPECTED = List.of(
"Languages", ":",
"Java", "Kotlin", "Sql", "Javascript",
"C", "C++", "C#", "Typescript",
"Python", "Ruby", "Go", "Rust");
我們可以使用List's add()和addAll()方法方便地將單一String或String Collection加入到List<String>中。但是,這兩種方法不能直接將String元素陣列加入到List<String>中。
接下來,我們將討論將多個陣列中的元素新增至List不同方法。
3. 將陣列轉換為List ,然後使用addAll()方法
我們知道List.addAll()方法可以為List新增多個元素。但它接受Collection參數而不是數組。所以,解決問題的第一個想法就是將**陣列轉換為Collection ,例如List ,然後使用List.addAll()將陣列元素加入到List.**此外,要將陣列轉換為List ,我們可以使用Arrays.asList()方法:
List<String> languageList = initLanguageList();
for (String[] array : List.of(ARRAY1, ARRAY2, ARRAY3)) {
languageList.addAll(Arrays.asList(array));
}
assertEquals(EXPECTED, languageList);
在這個範例中,我們首先將三個陣列包裝在一個List.然後,我們使用循環遍歷每個數組。在循環中,我們將每個陣列轉換為List ,並將其傳遞給addAll()方法。
4. 使用Collections.addAll()方法
我們注意到List.addAll()不接受陣列作為參數。因此,我們將陣列轉換為List來提供List.addAll().但是, Collections.addAll()支援將多個元素作為Varargs新增至Collection物件:
public static <T> boolean addAll(Collection<? super T> c, T... elements)
由於 Java 將Varargs參數視為數組,因此我們可以直接將數組作為參數傳遞給Collections.addAll() :
List<String> languageList = initLanguageList();
for (String[] array : List.of(ARRAY1, ARRAY2, ARRAY3)) {
Collections.addAll(languageList, array);
}
assertEquals(EXPECTED, languageList);
如測試程式碼所示,我們用 Collections.addAll List.addAll() Collections.addAll()調用,並且不需要將陣列轉換為List 。
5. 使用Stream的flatMap()方法
Java Stream API 讓我們流暢、方便地操作Collection 。接下來我們使用Stream API來解決這個問題:
List<String> languageList = initLanguageList();
Stream.of(ARRAY1, ARRAY2, ARRAY3)
.flatMap(Arrays::stream)
.forEachOrdered(languageList::add);
assertEquals(EXPECTED, languageList);
正如我們所看到的,我們首先建立一個帶有三個String陣列的Stream物件。 flatMap()方法有助於將集合的集合(包括陣列的陣列)轉換和展平為單**一流**.在此範例中,我們使用此方法將陣列流扁平化為單一String值流。
然後,我們將方法引用 ( languageList::add ) 傳遞給Stream的forEachOrdered()方法,以將每個陣列元素加入到languageList中。
如果我們運行測試,它就會通過。 Stream.flatMap()方法利用 Java 流的強大功能來轉換和扁平化資料結構,使我們的程式碼簡潔且可讀。
六,結論
在本文中,我們探索了在 Java 中將多個String陣列中的元素新增至ArrayList的各種方法。我們可以使用Arrays.asList()方法或Collections.addAll()來解決這個問題。此外,使用Stream.flatMap()將多個String陣列中的元素新增至ArrayList是一種高效且優雅的方法。
與往常一樣,範例的完整原始程式碼可在 GitHub 上取得。