使用 Java 8 Stream API 过滤嵌套列表

pri*_*pri 5 java java-8 java-stream

我无法将以下代码段转换为 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);
            }

        }
    }
}  
Run Code Online (Sandbox Code Playgroud)

我正在将第三级嵌套列表对象与字段的输入列表进行比较。如果字段不匹配,那么我将从原始列表中删除它们。如何使用 Java 8 语法实现这一点。

编辑:我希望返回 FirstClass 列表。

Mis*_*sha 3

我认为在这种情况下流不会给你带来任何好处。您所做的就是迭代嵌套列表,或者使用增强的 for 循环,或者forEach更简单。

改进可以来自使用removeIf修改列表,并且可能来自将拒绝逻辑移出循环:

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

firstClassList.forEeach(first ->
    first.getSecondClassList().forEach(second ->
        second.getThirdClassList().removeIf(reject)
    )
);
Run Code Online (Sandbox Code Playgroud)