Java - 根据现有列表从流中获取新对象的列表

DrA*_*zek 5 java lambda arraylist java-8 java-stream

我需要使用lambda来生成一些新对象列表.这些新对象从现有对象继承了一些特征.由于很难描述它而不会涉及太多细节,我将使用父母及其子女的例子.

我想根据人员列表(一个人=一个孩子)生成一个孩子列表.孩子们应该只继承父母的一些特征(在这种情况下,让我们说它是肤色).

由于我有点被迫使用lambdas(但也想了解它是如何工作的),我已经尝试了以下解决方案,但我无法通过正确的映射解决问题(还没有看到类似的东西而且我正在做一个试错法.可能我也有一个制作精良的构造函数.

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));
    }
}
Run Code Online (Sandbox Code Playgroud)

Ous*_* D. 4

map您拥有 a之后Stream<Kid>,您需要的是 a List<Kid>,因此您需要通过 收集到列表toList()

return people.stream()
             .map(e -> new Kid(e))
             .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

或者如果您需要可变列表,请使用toCollection

return people.stream()
             .map(e -> new Kid(e))
             .collect(Collectors.toCollection(ArrayList::new));
Run Code Online (Sandbox Code Playgroud)

另一方面,您需要重新考虑您的设计。

  1. 不要将整个传递PersonKid构造函数,只需传递一个Colour假设它是一个枚举),否则传递String来表示颜色。
  2. Person老实说,在模型中拥有属性Kid没有多大意义,就像说“孩子有一个人”......也许您正在寻找的是Kid继承来Person表明“孩子是一个人” ”

ETC...