簡體   English   中英

使用流api java從內部列表中刪除元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM