0
votes

Moyen efficace de créer une liste de valeurs spécifiques à partir d'un tas de cartes

dire que j'ai une liste de cartes xxx

et ainsi de suite ...

Quel est le moyen le plus rapide de créer une liste de hauteurs ou de poids? Quelque chose comme la liste des hauteur de la liste, etc.

La manière classique consiste à rechercher sur la carte, à utiliser une condition IF et recherchez une clé de hauteur, puis si vous avez trouvé, ajoutez-le à une liste de retour. < p> Quel serait le moyen équivalent de le faire à l'aide de flux?


1 commentaires

et il ne devrait pas compiler, vous avez une liste > , mais ajoutant mappe s


3 Réponses :


7
votes
List<Double> listHeights = maps.stream()
                                .map(map -> map.get("height"))
                                .filter(Objects::nonNull)
                                .collect(Collectors.toList());
Similarly, you can do it for weight also.

1 commentaires

ajouterait null à la liste résultante si la carte ne contient pas la clé



2
votes

Vous pouvez planifier la liste et mapper les cartes sur les valeurs correspondantes:

List<Double> heights =
    maps.stream()
        .filter(m -> m.containsKey("height"))
        .map(m -> m.get("height"))
        .collect(Collectors.toList());


1 commentaires

peu de crochets de fermeture manquante ) autour du filtre et et ... et et contentent serait une meilleure alternative dans le filtre



1
votes

Si vous voulez obtenir les deux hauteur et Liste de la liste dans une photo, puis utilisez collectors.groupingby Pas besoin de contient < / code> ou null vérifier xxx

sortie xxx

et aussi Peut utiliser getordefault pour obtenir la liste de hauteur ou de poids xxx


0 commentaires