Javaでは、HashMap
として返されるList
の値をどのように取得しますか?
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put (1, "Mark");
map.put (2, "Tarryn");
List<String> list = new ArrayList<String>(map.values());
for (String s : list) {
System.out.println(s);
}
あなたが持っていると仮定:
HashMap<Key, Value> map; // Assigned or populated somehow.
値のリストの場合:
List<Value> values = new ArrayList<Value>(map.values());
キーのリストの場合:
List<Key> keys = new ArrayList<Key>(map.keySet());
HashMapではキーと値の順序が信頼できないことに注意してください。それぞれのリストでキーと値の位置の1対1の対応を保持する必要がある場合は、 LinkedHashMap を使用します。
基本的に、混乱を招くため、質問と回答を混同しないでください。
次に、変換の意味を指定し、このソリューションのいずれかを選択できます
List<Integer> keyList = Collections.list(Collections.enumeration(map.keySet()));
List<String> valueList = Collections.list(Collections.enumeration(map.values()));
コレクションインターフェイスには3つのビューがあります
Hashmapをキーと値の2つのリストに変換するために他の人が答えました。完全に正しいです
私の追加:「キーと値のペア」(通称entrySet)をリストに変換する方法。
Map m=new HashMap();
m.put(3, "dev2");
m.put(4, "dev3");
List<Entry> entryList = new ArrayList<Entry>(m.entrySet());
for (Entry s : entryList) {
System.out.println(s);
}
ArrayListにはこのコンストラクターがあります。
Java 8およびStream Apiを使用したソリューション:
private static <K, V> List<V> createListFromMapEntries (Map<K, V> map){
return map.values().stream().collect(Collectors.toList());
}
使用法:
public static void main (String[] args)
{
Map<Integer, String> map = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
List<String> result = createListFromMapEntries(map);
result.forEach(System.out :: println);
}
リスト内で同じ順序を維持する場合は、次のように言います。マップは次のようになります。
map.put(1, "msg1")
map.put(2, "msg2")
map.put(3, "msg3")
あなたのリストは次のようになりたい
["msg1", "msg2", "msg3"] // same order as the map
マップを反復処理する必要があります。
// sort your map based on key, otherwise you will get IndexOutofBoundException
Map<String, String> treeMap = new TreeMap<String, String>(map)
List<String> list = new List<String>();
for (treeMap.Entry<Integer, String> entry : treeMap.entrySet()) {
list.add(entry.getKey(), entry.getValue());
}
HashMapを反復処理するだけの場合、リストは不要です。
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put (1, "Mark");
map.put (2, "Tarryn");
for (String s : map.values()) {
System.out.println(s);
}
もちろん、反復中にマップを構造的に変更する(つまり、既存のキーの値を変更するだけではない)場合は、「copy to ArrayList」メソッドを使用することをお勧めします。そうしないと、ConcurrentModificationExceptionが発生します。または、配列としてエクスポートします。
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put (1, "Mark");
map.put (2, "Tarryn");
for (String s : map.values().toArray(new String[]{})) {
System.out.println(s);
}