La collecte des listes à partir d'une liste d'objets à l'aide de Java 8 Flux API
J'ai une classe comme ça
public class Example {
private List<Integer> ids;
public getIds() {
return this.ids;
}
}
Si j'ai une liste d'objets de cette classe comme ceci
List<Example> examples;
Comment pourrais-je être en mesure de cartographier l'id de la liste de tous les exemples dans une liste?
J'ai essayé comme ceci:
List<Integer> concat = examples.stream().map(Example::getIds).collect(Collectors.toList());
mais d'avoir une erreur avec Collectors.toList()
Quelle serait la bonne façon de réaliser cela avec Java 8 flux api?
- Double Possible de What est la différence entre la carte et flatMap méthodes en Java 8?. Et même ce n'est pas une duplication parfaite, les réponses sont utiles.
- Votre méthode
getIds
n'ont pas de type de retour.
Vous devez vous connecter pour publier un commentaire.
Utilisation
flatMap
:flatMap
etmap
e.getIds()
retourne une liste vide ou null? Comment pourrait un test pour la liste vide ou null être inclus dans la déclaration?NullPointerException
serait jeté. Comment voulez-vous gérer la valeur null; et pourquoi voudriez-vous (spécialement) gérer une liste vide?null
: je me demandais, ce que l'expression lambda devrait/pourrait revenir si j'ai vérifié il si la liste a éténull
et pour éviter unNullPointerException
.{ List<Integer> ids = e.getIds(); if (ids == null) ids = Collections.emptyList(); return ids.stream(); }
. Mais considérer que la valeur null peut lui-même être un bug; il pourrait donc être préférable de le réparer plutôt que de le contourner.Une autre solution en utilisant la méthode de référence de l'expression à la place de l'expression lambda: