Java でリストをマップに変換する

Rupam Yadav 2023年10月12日
  1. ArrayList と HashMap を使用してリストからマップに
  2. Java で StreamCollectors を使用してリストをマップに変換する
  3. Java で Sort と Collect を使ってリストをマップに変換する
Java でリストをマップに変換する

List を使用すると、オブジェクトの順序付けられたコレクションを維持できます。Map オブジェクトは、キーを値にマップします。Java には、オブジェクトの ListMap に変換するためのいくつかの方法があります。この記事では、それらのいくつかを学びます。

ArrayList と HashMap を使用してリストからマップに

Java の List インターフェースは、オブジェクトの順序付けられたコレクションを可能にし、重複した値を格納します。要素を更新、削除、挿入、および検索するためのインデックスベースのメソッドを提供します。List に null 値を格納することもできます。ArrayListLinkedList は、List インターフェースを実装するクラスの一部です。

Java の Map インターフェースは、一意のキーを値にマップし、重複するキーを含めることはできません。その一意のキーに基づいて要素を検索、更新、挿入するための便利なメソッドがあります。HashMap クラスは Map インターフェースを実装します。

クラス Book には、これらの属性の 3つのメンバー変数 bookNameauthorid、および 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 で StreamCollectors を使用してリストをマップに変換する

上記のタスクを実行するために、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 Yadav
Rupam Yadav avatar Rupam Yadav avatar

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 Map