【Java入門】MapとListの相互変換まとめ(key、valueのList化)

JavaのListMapなどのコレクションは、Map→List、List→Mapへ変換することが可能です。

この記事では、そんなMapとListの変換方法について、以下の内容で解説していきます。

  • 【基礎】MapとListの違い
  • 【基礎】MapからListへ変換
  • 【基礎】ListからMapへ変換
  • 【発展】Java8のStreamを使う方法

今回はMapとListの変換について、さまざまな方法をわかりやすく解説します!

MapとListの違い

そもそも、MapとListはどちらもコレクションの一種ですが何が違うのでしょうか?

MapをListに変換するメリット、ListをMapに変換するメリットはどこにあるのでしょうか?詳しく解説していきます。

特長の違い

Mapはインデックスとなるkeyとそのデータとなるvalueの両方を定義することができます。keyには整数値のほかにString型などの変数なども指定することができます。keyに指定した変数から、valueを呼び出すことができます。

なお、Mapのキーは重複させることはできません。これに対して、Listは要素を格納した順に自動的に整数値のインデックスが生成され、値と紐づけされます。

Listの要素はインデックス番号を指定して、値を呼び出します。keyと関連付けて値を保持する必要がある場合はMapが適しています。

また、Listは要素の値で並び順を替えるソートができますが、Mapはそのままではできません。

MapのkeyやvalueをListや配列に変換する必要があります。要素の順番が必要となる場合はListが適しています。これから先の解説を参考にして、目的に合わせて変換できるようにしましょう!

定義の違い(HashMapとArrayList)

MapやListはインターフェースですので、インスタンスを生成するには別のクラスを使用する必要があります。

Mapの場合はHashMapクラスを、Listの場合はArrayListクラスなど、インターフェースを実装したクラスを使用します。

これらを使って以下のように定義します。

MapもListもインターフェースで、インスタンスを生成することはできませんが、オブジェクトは宣言できます。それぞれのインターフェースを実装したクラスのインスタンスをオブジェクトに格納しています。

なお、この例ではMapのkeyはString型、valueはInteger型で指定されています。型の指定はクラス型で行います。

int型などのプリミティブ型は使用できないので注意しましょう。

MapからListへ変換

ここでは、MapのkeyをListに変換する方法、MapのvalueをListに変換する方法をそれぞれ解説していきます!

MapのkeyをListに変換

Mapのkey(キー)をListに変換するにはkeySetメソッドを使用します。

以下に、MapのキーをListに変換する方法を記述します。

実行結果:

サンプルではMapクラスを宣言し、変数mapにputメソッドを使用して、キーと値をそれぞれ設定しています。

次にListクラスを宣言し、keySetメソッドを使用してMapのキーを変数listに格納しています。Listの中身を確認すると、Mapで追加したkeyが全て取得されているのがわかります。

MapのvalueをListに変換

value(値)を取得する場合はvaluesメソッドを使用します。

Mapの値をListに変換するためには、紹介したサンプルの「Listを宣言してMapのキーを取得する箇所」を変更して、以下のように記述します。

実行結果:

keyの値取得と異なる点は、MapをListに変換時にkeyの取得はkeySetメソッドを使用しているのに対して、valueを取得する場合はvaluesメソッドを使用しています。

Listの中身を確認すると、Mapで追加したvalueが全て取得されているのがわかります。

ListからMapへ変換

ここでは、Listで設定した値をMapのkeyとvalueへ変換する方法を、それぞれ解説します。

Listの値をMapのkeyに変換

以下に、Listの値をMapのkeyへ設定するサンプルコードを記述します。

実行結果:

サンプルではListクラスを宣言し、変数listに値を追加しています。

次にMapクラスを宣言し、拡張for文を使用してlistをループして、Listの値をputメソッドでMapのkeyとして格納しています。

Listの値をMapのvalueへ変換

以下に、Listの値をMapのvalueへ設定するサンプルコードを記述します。

実行結果:

サンプルではListクラスを宣言し、変数listに値を追加しています。次にMapクラスを宣言し、拡張for文を使用してlistをループして、putメソッドでMapの要素を格納しています。

Mapのkeyに関しては、変数int型の変数iを宣言し、ループでインクリメントしてMapのkeyとして設定しています。

実行結果を確認すると、変数mapのvalueが取得されていることがわかります。

Java8のStreamを使う方法

Java8ではStream APIを使用できるようになりました。

MapからListへ変換する方法は変わりありませんが、ListからMapへ変換する方法が簡潔に記述できるようになりました。

例えば、Listの文字列をMapのkeyにその文字列の長さをvalueに格納したMapに変換する場合、以下のように記述することができます。

詳しい説明については、こちらのサイトを参考にしてくださいね、

【Java入門】List⇔Map変換でJava8のStreamを使う方法
更新日 : 2017年9月6日

初期化、値の取得などMapについて知りたい!

初期化、getでの値の取得、for・forEach、ソートなどMapの使い方について詳しくしりたい方は、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

【Java入門】Mapの使い方総まとめ(HashMapで初期化、値のソート)
更新日 : 2019年5月22日

まとめ

MapからList、ListからMapへ変換する方法を一通り説明しました

実際の業務でも、ここで説明したような変換処理が必要になることが度々ありますので、この機会にぜひ覚えておいてください。

もし、MapやListなどのコレクションの変換方法を忘れてしまったら、この記事を思い出してくださいね。

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

中沢 丈

中沢 丈

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説