HOWTO · Java
Java でリストを連結する
この記事では、Java でのリストの連結について紹介します。
動的に増加する可能性のある要素の順序付けられたコレクションは、List コレクションと呼ばれます。これは node 要素として表され、各ノードには次のノードと要素への reference が含まれます。リストコレクションに対して実行できる操作には、要素の走査、挿入、更新、およびインデックスを使用した削除が含まれます。
Java は、その機能のためのさまざまなメソッドを提供する List インターフェースを提供します。リストの複数の実装には、ArrayList、LinkedList、および SortedList が含まれます。リストには、次のことができるさまざまなプロパティがあります。
- リスト内で重複する値になります。
- null 要素を格納します。
- サイズが明確な配列とは異なり、動的に成長します。
以下のコードは、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);
}
}
上記のコードブロックでは、最初の 2 行で、連結するリストを初期化します。
リストを初期化する最初の方法は、宣言自体の時点で要素を指定することです。したがって、Java 8 方法論に従って、Stream インターフェースが使用されます。ストリームはデータソースのラッパーとして機能し、データを操作および処理するためのメソッドを提供します。of 静的メソッドは、提供された要素の順次ストリームをパラメーターとして受け取り、作成し、要素ストリームを返します。実行する一連の操作は Java 8 です。collect メソッドは、削減後に提供される Stream を収集する端末操作です。
リストを初期化する別の方法は、Java 9 バージョンを使用することです。これは、不変リストを作成する List.of 静的ファクトリメソッドを使用してリストを初期化する便利な方法を提供します。
最後に、結合された List オブジェクトは、従来、Java 7 バージョンを使用して初期化されます。addAll() メソッドは、newList インスタンスを使用して呼び出されます。このメソッドは、指定されたコレクションを、識別されたコレクションの最後に追加します。リストの追加が成功すると、true を返します。渡されたリストコレクションが null の場合、メソッドは 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() メソッドは、連結する 2つのストリームを取ります。そして、パラメータとして渡す 2つのストリームから結合されたリストを返します。このメソッドでは、collect 関数が呼び出され、ストリームが目的の形式に変換されます。この関数はコレクターを引数として取り、この場合、Collectors.toList() 関数を渡して、List タイプのストリームを減らします。
出力は最初のコードブロックと同様であり、上記のコンソールログの Way 2 ステートメントの下に出力されます。
Java 8 で Stream.of() メソッドを使用したリストの連結
上記のように、of は要素を受け取る Stream インターフェースの静的メソッドです。したがって、これらの要素はプリミティブデータ型または collections クラスにすることができます。鳥や動物のコレクションは議論として渡されます。これで、flatMap メソッドが一連の呼び出しで呼び出され、処理を実行して渡されたストリームを変換するために使用されます。
flatMap メソッドは、パラメーターとして関数を取ります。このメソッドは、要素に変換を適用し、結果を平坦化します。この場合、Collection::stream が渡されて、単一のストリーム内の要素が変換され、処理後に返されます。ストリームは、collect メソッドを使用して収集されるようになりました。
出力は上記のコンソールブロックと同じで、見出しは Way 3 です。