使用流 api java 从内部列表中删除元素

remove element from inner list using stream api java

我有一个文档对象,其中有一个模型 class 列表,其中包含进一步模型 classes 的级联内部列表。

层级如下

文档 --> MODEL_1 --> MODEL_2 --> MODEL_3 --> MODEL_4

我需要做的是从这个文档对象中删除所有这样的 MODEL_4 项,它们的 model_name 为 "ABC"

我目前尝试的是

List<MODEL_1> model1List = document.getModelList();

for (int i = 0; i < model1List.size(); i++) {               
    MODEL_1 model1 = model1List.get(i);
    List<MODEL_2> model2List = model1.getModel_2list();

        for (int j = 0; j < model2List.size(); j++) {
            MODEL_2 model2 = model2List.get(j);
            List<MODEL_3> model3List = model2.getModel_3List();

            for (int z = 0; z < model3List.size(); z++) {
                MODEL_3 model3 = model3List.get(z);         
                List<MODEL_4> model4List = model3.getModel4List();

                model4List.removeIf(element -> element.getModelname().equals("ABC"));
            }
        }
    }
}

有效 - 但我知道这不是最佳编码。

我尝试编写一个谓词 - 来过滤这样的元素 - 但无法弄清楚 如何为内部列表编写谓词。

有没有人知道内部列表的谓词..

感谢任何帮助,提前致谢

我认为您的解决方案非常直接,在性能方面无法优化(很多或根本无法优化),但可能与代码行数相关的可读性有关。

文体改进可能是这样的:

model1List.forEach(model1 -> 
    model1.getModel2List().forEach(model2 ->
        model2.getModel3List().forEach(model3 -> 
            model3.getModel4List().removeIf(model4 -> model4.getModelName().equals("ABC"))
        )
    )
);

请注意,您需要 Java 8,但由于您更新到 removeIf...

,您显然(至少)拥有它