2015-06-23 31 views
6

Sto provando a utilizzare java 8 per restituirmi un elenco di valori chiave (numeri interi) in cui il valore (casella di controllo) è controllato. La mappa che sto cercando di elaborare è della seguente forma.Java 8 - Elenco di ritorni (keyset) opposto a List <Map.Entry <Integer, CheckBox >>

Map<Integer, CheckBox> 

L'obiettivo è restituire il set di chiavi per tutti i valori in cui è selezionato il valore della casella di controllo.

Se faccio la seguente

checkBoxes.entrySet().stream().filter(c -> c.getValue().getValue()) 
       .collect(Collectors.toList()); 

poi torno un List<Map.Entry<Integer, CheckBox>> Esiste un modo per fare tutto questo in una sola riga senza elaborare i valori Map.Entry così posso solo ottenere una lista di interi?

Grazie

risposta

8

È possibile aggiungere una chiamata map per estrarre la chiave dal Entry:

List<Integer> keys = checkBoxes.entrySet().stream() 
      .filter(c -> c.getValue().getValue()) 
      .map(Map.Entry::getKey) 
      .collect(Collectors.toList()); 
+0

perfetto - vi ringrazio molto. Sembra che ho bisogno di andare via e imparare questo un po 'di più in quanto non ero consapevole che potrebbe essere fatto. Grazie – Biscuit128