Java でリストをマップに変換する
- ArrayList と HashMap を使用してリストからマップに
-
Java で
Stream
とCollectors
を使用してリストをマップに変換する - Java で Sort と Collect を使ってリストをマップに変換する
List
を使用すると、オブジェクトの順序付けられたコレクションを維持できます。Map
オブジェクトは、キーを値にマップします。Java には、オブジェクトの List
を Map
に変換するためのいくつかの方法があります。この記事では、それらのいくつかを学びます。
ArrayList と HashMap を使用してリストからマップに
Java の List
インターフェースは、オブジェクトの順序付けられたコレクションを可能にし、重複した値を格納します。要素を更新、削除、挿入、および検索するためのインデックスベースのメソッドを提供します。List
に null 値を格納することもできます。ArrayList
、LinkedList
は、List
インターフェースを実装するクラスの一部です。
Java の Map
インターフェースは、一意のキーを値にマップし、重複するキーを含めることはできません。その一意のキーに基づいて要素を検索、更新、挿入するための便利なメソッドがあります。HashMap
クラスは Map
インターフェースを実装します。
クラス Book
には、これらの属性の 3つのメンバー変数 bookName
、author
、id
、および getter メソッドがあります。toString()
メソッドをオーバーライドして、Book
クラスデータをフォーマットしました。Book
クラスのオブジェクトが作成されます。List
インターフェースの add()
メソッドは、オブジェクトを bookList
に挿入します。
HashMap
クラスを使用して Map
オブジェクトを作成します。このクラスは、Integer
タイプのキーと Book
タイプとしての値を保持します。put()
メソッドを使用し、bookList
からすべての Book
データをマップに追加する、拡張された for
ループを使用します。
put()
メソッドは 2つの引数を取ります。getId()
を呼び出してそれをキーとして使用し、その特定のキーの値としてブッククラスオブジェクト b
を格納することにより、id
属性にアクセスしました。出力に示すように、bookMap
オブジェクトを出力できます。
class Book {
int id;
String bookName;
String author;
public Book(int id, String bookName, String author) {
this.id = id;
this.bookName = bookName;
this.author = author;
}
public int getId() {
return id;
}
public String getAuthor() {
return author;
}
public String getBookName() {
return bookName;
}
@Override
public String toString() {
return "Book{"
+ " bookName='" + bookName + '\'' + ", author='" + author + '\'' + '}';
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args) {
List<Book> bookList = new ArrayList<>();
bookList.add(new Book(1, "Barney's Version", "Mordecai Richler"));
bookList.add(new Book(2, "The Unsettlers", "Mark Sundeen"));
bookList.add(new Book(3, "The Debt to Pleasure", "John Lanchester"));
Map<Integer, Book> bookMap = new HashMap();
for (Book b : bookList) {
bookMap.put(b.getId(), b);
}
System.out.println("BookMap " + bookMap.toString());
}
}
出力:
BookMap {1=Book{ bookName="Barney's Version", author='Mordecai Richler'}, 2=Book{ bookName='The Unsettlers', author='Mark Sundeen'}, 3=Book{ bookName='The Debt to Pleasure', author='John Lanchester'}}
Java で Stream
と Collectors
を使用してリストをマップに変換する
上記のタスクを実行するために、Java 8 の Stream
および Collectors
でラムダ関数を使用するのは簡単です。stream()
メソッドは、bookList
から Book
クラスオブジェクトの Stream
を返します。
これらの要素を収集するには、Stream
クラスの collect()
メソッドを使用します。要素はマップに収集されるため、この Collectors.toMap()
を使用しました。キーは id
であり、Book
オブジェクトを値として格納します。result1
を出力として出力すると、bookList
をマップに変換したことがわかります。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
List<Book> bookList = new ArrayList<>();
bookList.add(new Book(1, "Barney's Version", "Mordecai Richler"));
bookList.add(new Book(2, "The Unsettlers", "Mark Sundeen"));
bookList.add(new Book(3, "The Debt to Pleasure", "John Lanchester"));
Map<Integer, String> result1 =
bookList.stream().collect(Collectors.toMap(Book::getId, Book::toString));
System.out.println("Result 1 : " + result1);
}
}
出力:
Result 1 : {1=Book{ bookName="Barney's Version", author='Mordecai Richler'}, 2=Book{ bookName='The Unsettlers', author='Mark Sundeen'}, 3=Book{ bookName='The Debt to Pleasure', author='John Lanchester'}}
Java で Sort と Collect を使ってリストをマップに変換する
id
を逆の順序で比較することにより、bookList
から Book
クラスオブジェクトのストリームを並べ替えることができます。最初に comparingInt()
を呼び出し、int
タイプの id
を渡し、次に reverse()
メソッドを呼び出して順序を逆にします。
ソートされたストリームを Map
クラスオブジェクトに収集できます。重複するキー(この場合は 2
)がある場合、マップは、(oldValue, newValue) -> newValue
を説明する同じキー
の新しい値を取ります。
import java.util.*;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
List<Book> bookList = new ArrayList<>();
bookList.add(new Book(1, "Barney's Version", "Mordecai Richler"));
bookList.add(new Book(2, "The Unsettlers", "Mark Sundeen"));
bookList.add(new Book(2, "The Debt to Pleasure", "John Lanchester"));
Map result1 = bookList.stream()
.sorted(Comparator.comparingInt(Book::getId).reversed())
.collect(Collectors.toMap(Book::getId, Book::toString,
(oldValue, newValue) -> newValue, LinkedHashMap::new));
System.out.println("Result 1 : " + result1);
}
}
出力:
Result 1 : {2=Book{ bookName='The Debt to Pleasure', author='John Lanchester'}, 1=Book{ bookName="Barney's Version", author='Mordecai Richler'}}
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn関連記事 - Java List
- Java でリストから最初の要素を取得する
- Java でリストをチャンクに分割する
- Java のフィルタ リスト
- Java のリストと Arraylist の違い
- Java を使用してリスト内の要素のインデックスを検索する
- Java でマップ値をリストに変換する