J'ai un Map<B, List<A>>
. Je veux filtrer certains A en fonction d'un prédicat qui repose sur la clé de l'entrée de carte de type B.Par exemple, voici ma structure de données:
List<Integer> list1 = Arrays.asList(5,2,3,4);
List<Integer> list2 = Arrays.asList(5,6,7,8);
List<Integer> list3 = Arrays.asList(9,10,11,12,13);
List<Integer> list4 = Arrays.asList(11,23,112);
Map<Long, List<Integer>> map = new HashMap<>();
map.putIfAbsent(2L, list1);
map.putIfAbsent(3L, list2);
map.putIfAbsent(4L, list3);
map.putIfAbsent(5L, list4);
Maintenant, je veux parcourir le entrySet de la carte et créer une nouvelle carte avec une liste contenant les éléments qui est un multiple de la clé de cette entrée. ie La sortie devrait ressembler à ceci:
2L --> List of (2, 4)
3L --> List of (6)
4L --> List of (12)
5L --> empty List
Le prédicat de filtrage utilise la valeur de la clé d'entrée de carte pour tester les éléments de la liste. Comment puis-je y parvenir sans modifier la carte d'origine?
Voici une façon de résoudre le problème, en diffusant les entrées dans la carte d'origine et en créant une nouvelle carte avec les clés et les listes filtrées:
Map<Long, List<Integer>> newMap = map.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().stream()
.filter(value -> value % entry.getKey() == 0)
.collect(Collectors.toList())));
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots