使用流 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
...
,您显然(至少)拥有它
我有一个文档对象,其中有一个模型 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
...