web-dev-qa-db-ja.com

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

Map<key,value>List<value>に変換するための最良の方法は何ですか?すべての値を反復処理してそれらをリストに挿入するだけですか。

617
Javaa
List<Value> list = new ArrayList<Value>(map.values());

と仮定します。

Map<Key,Value> map;
1212
cletus

ここでの問題は、 Map には2つの値(キーと値)があり、 List には1つの値(要素)しかないことです。

したがって、最善の方法は、キーまたは値のListを取得することです。 (キー/値ペアを保持するためのラッパーを作成しない限り)。

Mapがあるとします。

Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");

Listとしてのキーは、 Map.keySet メソッドによって返される ArrayList から新しい Set を作成することによって取得できます。

List<String> list = new ArrayList<String>(m.keySet());

Map.values メソッドによって返される List から新しいArrayListを作成することで、Collectionとしての値を取得できます。

List<String> list = new ArrayList<String>(m.values());

キーのListを取得した結果:

アップル
もう一人
こんにちは

値のListを取得した結果:

 3.14 
要素
世界
128
coobird

Java 8 Streams APIを使用する。

List<Value> values = map.values().stream().collect(Collectors.toList());
31
Matej Kormuth

map.entrySet()は、キーと値の両方を含むMap.Entryオブジェクトのコレクションを提供します。これをnew ArrayList(map.entrySet())のように好きなコレクションオブジェクトに変換できます。

21
java dude

何のリスト?

mapMapのインスタンスであると仮定します

  • map.values()はマップのすべての値を含むCollectionを返します。
  • map.keySet()はマップのすべてのキーを含むSetを返します。
21
Diego Amicabile

Mapに含まれる値をlistに変換したいと思いますか。最も簡単な方法はMapインターフェースのvalues()メソッドを呼び出すことです。これはCollectionに含まれる値オブジェクトのMapを返します。

このCollectionMapオブジェクトによって支えられており、Mapオブジェクトへの変更はすべてここに反映されます。 Mapオブジェクトに束縛されていない別のコピーが欲しい場合は、以下のように値Listを渡すArrayListのような新しいCollectionオブジェクトを作成するだけです。

ArrayList<String> list = new ArrayList<String>(map.values());
12
maneesh

あなたはこれのようにそれをすることができます

List<Value> list = new ArrayList<Value>(map.values());
6
user3752441

結果のList<Value>の値が入力Map<Key, Value>のキー順になっていることを確認したい場合は、どういうわけかSortedMapを「経由する」必要があります。

start を具体的なSortedMap実装(TreeMapなど)で使用するか、入力MapSortedMapに変換してからListに変換します。例えば。:

Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));

それ以外の場合は、Map実装が提供するネイティブの順序付けがすべて得られますが、これは自然なキー順序付け以外のものになることがよくあります(HashtableまたはConcurrentHashMapを試してみてください)。

4
M0les
    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("Java", 20);
    map.put("C++", 45);

    Set <Entry<String, Integer>> set = map.entrySet();

    List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);

リストにキーと値のペアを入れることもできます。また、Map.Entryを使用してリストを繰り返すことでキーと値を取得することもできます。

3
user11
// you can use this
List<Value> list = new ArrayList<Value>(map.values());

// or you may use 
List<Value> list = new ArrayList<Value>();
for (Map.Entry<String, String> entry : map.entrySet())
{
list.add(entry.getValue());    
}
1
saurabhgoyal795

これはmapから値を取得するための一般的な方法です。

public static <T> List<T> ValueListFromMap(HashMap<String, T> map) {
    List<T> thingList = new ArrayList<>();

    for (Map.Entry<String, T> entry : map.entrySet()) {
        thingList.add(entry.getValue());
    }

    return thingList;
}
0
Hiral Pancholi
HashMap<Integer, List<String>> map = new HashMap<>(); 
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("Primefaces");
list.add("JSF");
map.put(1,list);
if(map != null){
    return new ArrayList<String>((Collection<? extends String>) map.values());
}
0
Hakan Anlamaz
"Map<String , String > map = new HapshMap<String , String>;
 map.add("one","Java");
 map.add("two" ,"spring");
 Set<Entry<String,String>> set =  map.entrySet();
 List<Entry<String , String>> list = new ArrayList<Entry<String , String>>    (set);
 for(Entry<String , String> entry : list ) {
   System.out.println(entry.getKey());
   System.out.println(entry.getValue());
 } "
0
siva prasad