HOWTO · Java

Java 中的連線列表

本文介紹了 Java 中的列表連線。

可以動態增加的有序元素集合稱為 List 集合。它被表示為一個 node 元素,每個節點都包含一個到下一個節點和元素的 reference。我們可以對列表集合執行的操作包括使用索引的元素遍歷、插入、更新和刪除。

Java 提供了一個 List 介面,該介面為其功能提供了各種方法。列表的多種實現包括 ArrayListLinkedListSortedList。列表的不同屬性可以:

  • 成為列表中的重複值。
  • 儲存空元素。
  • 動態增長,與大小確定的陣列不同。

下面的程式碼說明了如何建立 Java 連線列表:

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ListConcatenation {
  public static void main(String[] args) {
    List<String> birds_list =
        Stream.of("pigeon", "crow", "squirrel").collect(Collectors.toList()); // Java 8
    List<String> animal_list = List.of("cat", "dog", "rabbit"); // Java 9

    System.out.println("Way 1");
    List<String> stringArrayList = new ArrayList<String>(); // Java7
    stringArrayList.addAll(birds_list);
    stringArrayList.addAll(animal_list);
    System.out.println(stringArrayList);

    System.out.println("Way 2");
    List<String> newList =
        Stream.concat(birds_list.stream(), animal_list.stream()).collect(Collectors.toList());
    System.out.println(newList);

    System.out.println("Way 3");
    List<String> newList2 =
        Stream.of(birds_list, animal_list).flatMap(Collection::stream).collect(Collectors.toList());
    System.out.println(newList2);
  }
}

在上面的程式碼塊中,前兩行初始化了我們想要連線的列表。

列表初始化的第一種方式是在宣告本身時賦予元素。因此,根據 Java 8 方法,使用 Stream 介面。流充當資料來源的包裝器,並提供操作和處理資料的方法。of 靜態方法接受並建立所提供元素的順序流作為引數,並返回元素流。我們執行的操作鏈在 Java 8 中。collect 方法是一個終端操作,它收集歸約後提供的 stream

初始化列表的另一種方法是使用 Java 9 版本。它提供了一種使用建立不可變列表的 List.of 靜態工廠方法來初始化列表的便捷方法。

最後,傳統上使用 Java 7 版本初始化組合的 List 物件。使用 newList 例項呼叫 addAll() 方法。該方法將指定的集合附加到其末尾標識的集合。當附加列表成功時,它返回 true。當傳遞的列表集合為空時,該方法可以丟擲 NullPointerException

組合列表例項現在包含 birds_list 集合。類似地,animal_list 例項被新增到 stringArrayList。最後,在列印列表後,它會建立一個一個接一個附加的順序集合。

下面是程式碼塊的控制檯輸出:

Way 1
[pigeon, crow, squirrel, cat, dog, rabbit]
Way 2
[pigeon, crow, squirrel, cat, dog, rabbit]
Way 3
[pigeon, crow, squirrel, cat, dog, rabbit]

在 Java 8 中使用 cacat() 方法進行列表連線

圖示使用相同的程式碼塊來顯示 concat() 方法——它在 Stream 介面中是靜態的。當終端操作應用於函式時,它被視為中間操作或延遲初始化。concat() 方法採用兩個要連線的流。它從我們作為引數傳遞的兩個流中返回組合列表。通過這個方法,collect 函式被呼叫以將流轉換為所需的格式。該函式將收集器作為引數,在我們的例子中,傳遞 Collectors.toList() 函式以減少 List 型別的流。

輸出將類似於第一個程式碼塊,並在上面的控制檯日誌中列印在 Way 2 語句下。

在 Java 8 中使用 Stream.of() 方法進行列表連線

如上所述,ofStream 介面中的一個靜態方法,它接受元素。所以這些元素可以是原始資料型別或集合類。鳥類和動物的集合作為引數傳遞。現在,flatMap 方法在呼叫鏈中被呼叫,其用途是對傳遞的流進行處理和轉換。

flatMap 方法採用 Function 作為其引數。該方法對元素應用變換並展平結果。在這種情況下,傳遞 Collection::stream 以轉換單個流中的元素,該流在處理後返回。現在使用 collect 方法收集流。

輸出與上面的控制檯塊相同,標題為 Way 3