java streams-comment mettre à plat toutes les valeurs de la carte des collections en utilisant la condition sur la clé


J'ai une carte. Disons

Map<Long, List<MyObj>> 

Je veux créer un tableau où tous les MyObj où la clé (long) se trouve dans un autre jeu()

anotherSet.contains(long)

Utilisation de java stream.

J'ai essayé

map.entrySet()
   .stream()
   .filter(e->anotherSet(e.getKey()))
   .flatMap(e.getValue)
   .collect(Collectors.toList);

Mais il ne compile même pas

Author: Eran, 2016-08-02

1 answers

Vous avez eu quelques erreurs de syntaxe.

Cela devrait produire votre List désiré:

List<MyObj> filteredList = 
    map.entrySet()
       .stream()
       .filter(e->anotherSet.contains(e.getKey())) // you forgot contains
       .flatMap(e-> e.getValue().stream()) // flatMap requires a Function that 
                                           // produces a Stream
       .collect(Collectors.toList()); // you forgot ()

Si vous voulez produire un tableau au lieu d'un List, utilisez :

MyObj[] filteredArray = 
    map.entrySet()
       .stream()
       .filter(e->anotherSet.contains(e.getKey()))
       .flatMap(e-> e.getValue().stream())
       .toArray(MyObj[]::new);
 7
Author: Eran, 2016-08-02 06:55:43