すべてのオブジェクトに名前フィールドがあるようなカタログのようなオブジェクト階層があります。lambda Java 8、フィルター操作の結果のフィールドであるリストをマップする方法
class A {
List<A> list;
String name;
}
A{A{A{A...}AA},A{AAA},A{AAA}} // the depth is finite (~4)
私は与えられた名前のための任意の親要素の子の名前(a.getName())のリストを返すメソッドのセットを提供したいと思います。 だから、レベル1のために、私は
a.getAs().stream().map(a1 -> a1.getName()).collect(Collectors.toList());
レベル2を持っている私はすでにとトラブルています
a1.getAs().stream().filter(a2 -> a2.getName() == name)
は今、私は同様にアクセスし、自分の名前にマッピングしたいが、私はどのように
知りませんEDIT: 私は、3つめのレベルから、単一の名前を提供するだけではリストを見つけることができないことに気付きました。子リストを収集できるノードにナビゲートできるようにするには、各レベルの名前が必要です。 一方、私はすべてのオブジェクトを1つのセットに保ち、IDでそれらにアクセスできます。彼らは依然としてお互いを参照しています。一方、根本的な要素を知らないことによって、私は構造を正しく得ることができませんでした。
私はこの問題を再考する必要があると思います。
'getAs'は' List 'を返しますか?なぜStream APIを使ってそれをしたいのですか? – Andrew
最後の明細書でフィルタを使用して達成しようとしていることを説明できますか? –
@Andrew Tobilko:はい、そうです。 Stream APIはより効率的で、読み易さが向上し、並列で実行できます。 – mooor