В качестве альтернативы, вы можете использовать ссылку на метод в map
как:
public List<Kid> listOfKids(List<Person> people) {
return people.stream()
.map(Kid::new) // your existing constructor resolves this
.collect(Collectors.toList());
}
Обратите внимание, что хотя реализация конструктора компилируется нормально, если вы хотите сохранить Person
и Colour
как атрибуты class Kid
было бы более целесообразно с помощью чего-то вроде:
// assign both attributes of the class within your constructor
public Kid(Person person, Colour colour) {
this.person = person;
this.colour = colour;
}
, а затем обновив функцию отображения следующим образом:
public List<Kid> listOfKids(List<Person> people) {
return people.stream()
.map(p -> new Kid(p, p.getColour())) // map to the updated contructor
.collect(Collectors.toList());
}
Детидолжны наследовать только некоторые черты своих родителей (в данном случае, скажем, это цвет кожи).
В этом случае вы можете использовать наследование вjava, расширив свой класс Kid от Person, для которого все, что вам нужно, это
public class Kid extends Person {
public Kid(Colour colour) {
super(colour);
}
}
, где определение класса Person может быть примерно таким:
public class Person {
Colour colour;
public Person(Colour colour) {
this.colour = colour;
}
}
, тогда с этим изменением вашметод будет выглядеть как
public List<Kid> listOfKids(List<Person> people) {
return people.stream()
.map(p -> new Kid(p.getColour()))
.collect(Collectors.toList());
}