フィルターおよびJava 8のストリームを使用して収集、ネストされたコレクションの要素

crmepham;

私が持っているのコレクションParentオブジェクトを、それぞれが持っているのコレクションChildたとえば、要素を:

public class Parent {
    private Collection<Child> children;
}

public class Child {
    private String type;
}

どのように私は、Java 8の機能フィルタにプログラミングとコレクト一緒のコレクション使用するChildタイプが「A」に等しいですか?

私は次のようでこれを試みました:

Collection<Child> filteredChildren = parents.stream()
                                        .forEach(p ->
                                            filteredChildren.addAll(p.getChildren().stream()
                                                          .filter(c -> c.getType().equals("A"))
                                                          .collect(Collectors.toList()))
                                        );

しかし、私は次のエラーを取得します:

変数「filteredChildren」初期化子「parents.stream().forEachた(p - > ...」冗長である少ない...(⌘F1)変数の値が代入、すなわち後に使用されることはありません例アウトこの検査ポイント: - 変数が割り当て後に読み取らない取得または決して - 変数初期化子は、(二つの理由上記のいずれかの)冗長である - 次の変数の読み取りまたは前の値は、常に別の割り当てを上書きします

どのように私はタイプによって、ネストされたコレクションをフィルタリングし、それらを収集していますか?

彼らは次のとおりでした:

それは使用することが間違っているforEachの端末のためにあなたのコード内でStreamあなたがそれを割り当てることはできませんので、それは、何も出力しないため、操作filteredChildren変数。

使用flatMapフラット得るためにStreamすべてのChildすべての(種類によってフィルタリング)のインスタンスParentのインスタンスをした後、収集するにはList

Collection<Child> filteredChildren = 
    parents.stream()
           .flatMap(p -> p.getChildren()
                          .stream()
                          .filter(c -> c.getType().equals("A")))
           .collect(Collectors.toList());

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=178816&siteId=1
おすすめ