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());