Je dois utiliser lambdas pour générer des listes de nouveaux objets. Ces nouveaux objets héritent quelques-uns des traits de ceux qui existent déjà. Comme il est difficile de le décrire sans entrer dans les détails trop délicats, je vais utiliser un exemple d'un parent et leurs enfants.
Je veux générer une liste des enfants sur la base d'une liste de personnes (une personne = un enfant). Les enfants devraient hériter seulement quelques traits de leurs parents (dans ce cas, disons que c'est une couleur de la peau).
Depuis que je suis un peu obligé de lambdas d'utilisation (mais veulent aussi savoir comment cela fonctionne), je l'ai essayé la solution suivante mais je ne peux pas obtenir sur le problème avec la cartographie correcte (n'ont pas vu quelque chose comme ça encore et je 'M faire une méthode d'essai et d'erreur). Probablement que j'ai un constructeur mal fait aussi bien.
public class Kid {
private Colour colour;
private Person person;
public Kid(Person person) {
this.colour = person.getColour();
}
public List<Kid> listOfKids() {
return people.stream()
.map(e -> new Kid(e));
}
}
Après que map
vous avez un Stream<Kid>
peu ce que vous avez besoin est un List<Kid>
vous aurez donc besoin de recueillir une liste via toList()
.
return people.stream()
.map(e -> new Kid(e))
.collect(Collectors.toList());
ou si vous avez besoin d' une liste mutable utilisez toCollection
:
return people.stream()
.map(e -> new Kid(e))
.collect(Collectors.toCollection(ArrayList::new));
Sur une autre note, vous devez repenser votre conception.
- au lieu de passer son ensemble
Person
auKid
constructeur passer juste unColour
( en supposant qu'il est un ENUM ) passent autrementString
pour représenter la couleur. - ayant un
Person
attribut dans unKid
modèle ne fait pas beaucoup de sens pour être honnête, il est comme dire « un enfant a une personne » ... peut - être ce que vous cherchez estKid
d'hériter dePerson
pour indiquer que « un enfant est une personne "
etc...