Javaは - 既存のリストに基づいて、ストリームから新しいオブジェクトのリストを取得します

DrAhzek:

私は、新しいオブジェクトのいくつかのリストを生成するためにラムダを使用する必要があります。これらの新しいオブジェクトは、既存のものから形質の一部を継承します。それはあまりにも繊細な細部に入ることなく、それを記述するのは難しいので、私は親とその子供たちの例を使用します。

私は人々(= 1人の子供1人)のリストに基づいて、子供たちのリストを生成したいです。子供たちは両親の唯一のいくつかの特徴を継承する必要があります(この場合には、のは、それが肌の色だとしましょう)。

私は多少(だけでなく、それがどのように動作するか学びたい)使用のラムダに強制していますので、私は以下のソリューションを試してみたが、私は正しいマッピングの問題を乗り越えることができない(まだそのようなものを見ていないと私「)トライアル&エラーの方法をやってメートル。おそらく、私はひどく作られたコンストラクタを持っているとしても。

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));
    }
}
Ousmane D .:

後はmapあなたが持っているStream<Kid>あなたが必要というものですList<Kid>ので、あなたが経由して、リストに収集する必要がありますtoList()

return people.stream()
             .map(e -> new Kid(e))
             .collect(Collectors.toList());

あなたはその後、変更可能なリストが必要な場合や使用toCollection

return people.stream()
             .map(e -> new Kid(e))
             .collect(Collectors.toCollection(ArrayList::new));

別のノートでは、あなたのデザインを再考する必要があります。

  1. 代わりに、全体を渡すのPersonKidちょうど通過コンストラクタColourそれが列挙だと仮定)、さもなければ通過String色を表現するために。
  2. 持つPerson内部属性Kidモデルは、それは「子供が言うようなものだ、正直に言うとあまり意味がありません持っている、あなたが探しているかもしれないものを...人が」あるKidから継承するPerson子供」と示すためにある人"

等...

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=178469&siteId=1