MapからList、ListからMapへの変換

MapからListへの変換

結論から記載すると、
MapからListへ変換したい場合は、以下のいずれかの方法で変換できます。

Map<String, String> map = new HashMap<String, String>();
List<String> valuesList = new ArrayList<String>(map.values());
List<String> keyList = new ArrayList<String>(map.keySet());

 

詳細

上記のソースコードのように、Mapインターフェイスのvalues()または、keySet()を使用してListに変換します。また、Javadocを確認すると、それぞれのメソッドの説明は以下のように記載されています。

・values():マップに含まれる値の Collection ビューを返します。
・keySet():マップに含まれるキーの Set ビューを返します。

 

そのため、Mapの
・キーをリストに変換する場合は、values()
・値をリストに変換する場合、keySet()
を利用します。

[サンプルコード]
MapToList.java

	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("key1", "value1");
		map.put("key2", "value2");
		// Mapの値をリストに変換
		List<String> valuesList = new ArrayList<String>(map.values());
		// Mapのキーをリストに変換
		List<String> keyList = new ArrayList<String>(map.keySet());
		// ソート
		Collections.sort(valuesList);
		Collections.sort(keyList);
		// 出力
		for (String val : valuesList) {
			System.out.println(val);
		}
		for (String val : keyList) {
			System.out.println(val);
		}
	}

上記のサンプルコードを実行した結果は、以下のように出力されます。

value1
value2
key1
key2

なお、Collections.sortによりソートを行っていない場合は、以下の結果になりますので、ソートにつては、必要に応じて行ってください。

value2
value1
key2
key1

ListからMapへの変換

ListからMapへ変換する際は、Mapのキーの付与が必要となりますので、MapからListへの変換のように1行で変換することができません。
そのため、変換には、以下のようにMapのキーを設定し、詰め替える処理が必要です。

※自力での変換が必要です

[サンプルコード]
ListToMap.java

	public static void main(String[] args) {

		// Mapのvalueとなるbeanを生成
		Bean bean1 = new Bean();
		bean1.setCode("001");
		bean1.setName("Name001");
		Bean bean2 = new Bean();
		bean2.setCode("002");
		bean2.setName("Name002");

		List&lt;Bean&gt; lst = new ArrayList&lt;Bean&gt;();
		lst.add(bean1);
		lst.add(bean2);
		lst.add(null);

		// ListからMapへ変換
		Map&lt;String, Bean&gt; mp = new HashMap&lt;String, Bean&gt;();
		for (Bean bean : lst) {
			if (bean != null) {
				if (mp.containsKey(bean.getCode())) {
					// キー未登録時
					mp.put(bean.getCode(), bean);
				} else {
					// キー重複時
					System.out.println(bean.getCode());
				}
			}
		}

		// Map登録情報の出力
		for (String key : mp.keySet()) {
			System.out.println(mp.get(key));
		}

	}

Bean.java

public class Bean {
	private String code = "";
	private String name = "";
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

また、上記のサンプルコードを実行した結果は、以下のように出力されます。

001
002

 

ソートについては、上記と同様、必要に応じて行ってください。


にほんブログ村 IT技術ブログ Javaへ

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です