2016-02-18 4 views
5

Normalerweise, wenn ich vorher alle Schlüssel einer Karte weiß, ich instanziiert es wie folgt aus:Kann eine Map mit einer Liste von Schlüsseln instanziiert werden?

List<String> someKeyList = getSomeList(); 
    Map<String, Object> someMap = new HashMap<String, Object>(someKeyList.size()); 

    for (String key : someKeyList) { 
     someMap.put(key, null); 
    } 

Gibt es eine Möglichkeit, dies durch die Liste zu durchlaufen, ohne direkt zu tun? Etwas zum Effekt von:

new HashMap<String, Object>(someKeyList) 

Mein erster Gedanke war, das Schlüsselset der Karte direkt zu redigieren, aber die Operation wird nicht unterstützt. Gibt es einen anderen Weg, den ich übersehe?

Antwort

7

können Sie Java 8 Streams verwenden:

Map<String,Object> someMap = 
    someKeyList.stream() 
       .collect(Collectors.toMap(k->k,k->null)); 

Beachten Sie, wenn Sie eine bestimmte Map Implementierung möchten, müssen Sie eine andere Methode verwenden toMap müssen, in dem Sie es angeben.

+0

Was sollten wir tun, wenn wir eine frühere Version von ** Java 8 ** verwenden? – mmuzahid

+1

@mmuzahid Das OP kann den Code benutzen, der in der Frage erscheint, wenn sie Java 8 nicht benutzen können. – Eran

+0

Danke! Nur der Einzeiler, den ich brauchte :) –

Verwandte Themen