[英]remove element from inner list using stream api java
我有一個文檔對象,其中有一個模型類列表,其中級聯了更多模型類的內部列表。
層次結構如下
文檔 --> MODEL_1 --> MODEL_2 --> MODEL_3 --> MODEL_4
我需要做的是從此文檔對象中刪除所有這些模型名稱為“ABC”的 MODEL_4 項目
我目前嘗試過的是
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
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.