Table de hachage avec des Flux en Java 8 Flux à percevoir la valeur de la Carte
Prenons un hashmap
Map<Integer, List> id1 = new HashMap<Integer,List>();
J'ai inséré quelques valeurs dans les deux hashmap.
Par Exemple,
List<String> list1 = new ArrayList<String>();
list1.add("r1");
list1.add("r4");
List<String> list2 = new ArrayList<String>();
list2.add("r2");
list2.add("r5");
List<String> list3 = new ArrayList<String>();
list3.add("r3");
list3.add("r6");
id1.put(1,list1);
id1.put(2,list2);
id1.put(3,list3);
id1.put(10,list2);
id1.put(15,list3);
T1) Maintenant, je veux appliquer une condition de filtre sur la clé dans la table de hachage et de récupérer la valeur correspondante(Liste).
Par exemple: Ici, Ma requête est la clé=1, et la sortie doit être "list1"
J'ai écrit
id1.entrySet().stream().filter( e -> e.getKey() == 1);
Mais je ne sais pas comment récupérer une liste de la sortie de ce volet de l'opération.
T2) Encore une fois je veux appliquer une condition de filtre sur la clé dans la table de hachage et de récupérer la liste de listes.
Par exemple: Ici, Ma requête est la clé=1%(j'.e-clés peuvent être 1,10,15), et la sortie doit être 'liste1','liste 2','list3'(liste de listes).
- N'utilisez pas de demi-cuite types Génériques. Très probablement, votre carte devrait être
Map<Integer, List<String>>
plutôt queMap<Integer, List>
Vous devez vous connecter pour publier un commentaire.
Si vous êtes sûr que vous allez obtenir au plus un élément unique qui a traversé le filtre (qui est garanti par votre filtre), vous pouvez utiliser
findFirst
:Dans le cas général, si le filtre peut correspondre à plusieurs Listes, vous pouvez les regrouper dans une Liste de Listes :
Ce que vous devez faire est de créer un
Stream
de laMap
's.entrySet()
:De l', vous pouvez
.filter()
sur ces entrées. Par exemple:Et pour obtenir les valeurs de il vous
.map()
:Enfin, vous avez besoin de collecter dans un
List
:Si vous avez une seule entrée, de l'utiliser (NOTE: ce code suppose qu'il existe une valeur; sinon, utilisez
.orElse()
; voir la javadoc deFacultatif
pour plus de détails):Pour votre T2, il y a déjà des réponses à votre question. Pour votre T1, et, plus généralement, lorsque vous savez que la clé de filtrage doit donner une valeur unique, il n'y a pas besoin d'utiliser les cours d'eau à tous.
Suffit d'utiliser
get
ougetOrDefault
, j'.e:Vous pouvez aussi faire comme ceci
Avec
flatMap
vous obtiendrez justeList<Student>
au lieu deList<List<Student>>
.Grâce
L'aide d'un jeu de clés-