Javaの8ストリームAPIを使用して、ネストしたリストのフィルター

中:

私は、Java 8ストリーム形式でスニペットの下に変換することができませんよ。

List<String> titles = Arrays.asList("First Name", "Last Name");

for (FirstClass first : firstClassList) {
    for (SecondClass second : first.getSecondClassList()) {
        for (ThirdClass third : second.getThirdClassList()) {                   

            if(!titles.contains(third.getField())) {
                second.getThirdClassList().remove(third);
            }

        }
    }
}  

私は、フィールドの入力リストに対して、第3レベルのネストされたリストオブジェクトを比較しています。フィールドが一致していない場合、私は元のリストから削除しています。どのように私はこの使用してJava 8の構文を達成することができます。

編集:私は、FirstClassの一覧を返すことにしたいです。

ミーシャ:

私は、ストリームはこの場合には、あなたには何も勝つとは思いません。あなたが行うすべては、ネストされたリストを反復され、拡張forループまたはどちらかforEachがより簡単です。

改善は使用してから来ることができるremoveIfループの外に拒否ロジックを移動するから、多分、リストを変更すると:

Predicate<ThirdClass> reject = third -> !titles.contains(third.getField());

firstClassList.forEeach(first ->
    first.getSecondClassList().forEach(second ->
        second.getThirdClassList().removeIf(reject)
    )
);

おすすめ

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