2016-02-18 7 views
5

Di solito, se so in anticipo tutte le chiavi di una mappa, mi un'istanza in questo modo:È possibile creare un'istanza di una mappa con un elenco di chiavi?

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

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

Esiste un modo per farlo direttamente, senza bisogno di scorrere la lista? Qualcosa per l'effetto di:

new HashMap<String, Object>(someKeyList) 

Il mio primo pensiero è stato quello di modificare direttamente keyset della mappa, ma l'operazione non è supportata. C'è un altro modo che sto trascurando?

risposta

7

È possibile utilizzare Java 8 Streams:

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

Si noti che se si desidera una specifica implementazione Map, dovrete utilizzare un metodo diverso toMap, in cui è possibile specificarlo.

+0

Cosa dovremmo fare quando utilizziamo la versione precedente di ** Java 8 **? – mmuzahid

+1

@mmuzahid L'OP può utilizzare il codice visualizzato nella domanda se non è possibile utilizzare Java 8. – Eran

+0

Grazie! Solo l'one-liner di cui avevo bisogno :) –

Problemi correlati