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
2
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