簡體   English   中英

通過添加其他列表中的對象從合並列表中刪除對象

[英]Removing objects from a list consolidated by adding objects from other lists

我正在嘗試編寫代碼以從ArrayList的實例中刪除某些對象。

建築:

  1. 我有三個類 - ClassA,ClassB和ClassC。
  2. ClassA是具有ClassB對象列表的父類。
  3. ClassB是ClassC的父級,有一個ClassC對象列表。
  4. ClassC包含一個名為“identifier”的私有變量,它帶有相關的getter / setter。
  5. ClassA有一個API“getClassCList”來獲取ClassC對象的綜合列表,這些對象包含在ClassA所擁有的所有ClassB對象中。

代碼目的:

  1. 使用ClassB實例准備ClassA。 使用ClassC實例准備ClassB。
  2. 在ClassA中調用API並獲取ClassC實例的綜合列表。
  3. 循環遍歷步驟2中返回的列表,找到具有特定標識符的ClassC實例。 需要從列表中刪除匹配的對象。

代碼問題:

  1. 當我在“classCList.removeAll(objectsTobeRemoved);”行中的類“Test.java”中調用.removeAll時 ,代碼實際上從ClassA實例的arraylist中刪除了對象,這些對象是由ClassA的API“getClassCList”返回的,而不是從ClassB對象中的ClassCList返回的。 我如何從ClassB中的ClassC列表中刪除ClassC實例?

  2. 更新 :我只能訪問我可以使用的ClassA實例。

  3. 更新2: ClassA實現了一個名為“IRetrieve”的接口。 從ClassA獲取ClassC實例的唯一方法是通過“getClassCList”API。 我也沒辦法從ClassA獲取ClassB實例。

碼:

 public interface IRetrieve {

        List<ClassC> getClassCList();

    }

    public class ClassA implements IRetrieve {

        private List<ClassB> classBList;

        public List<ClassB> getClassBList() {
            return classBList;
        }

        public void setClassBList(List<ClassB> classBList) {
            this.classBList = classBList;
        }

        public List<ClassC> getClassCList(){

            List<ClassC> classCList = new ArrayList<>();

            for(ClassB classB: classBList){
                classCList.addAll(classB.getClassCList());
            }

            return classCList;
        }
    }

    public class ClassB {

        private List<ClassC> classCList;

        public List<ClassC> getClassCList() {
            return classCList;
        }

        public void setClassCList(List<ClassC> classCList) {
            this.classCList = classCList;
        }
    }


    public class ClassC {

        private String identifier;

        public String getIdentifier() {
            return identifier;
        }

        public void setIdentifier(String identifier) {
            this.identifier = identifier;
        }
    }

    public class Test {
    public static void main(String[] args) {
        ClassA classA = new ClassA();
        classA.setClassBList(new ArrayList<ClassB>());
        for (int i = 0; i < 5; i++) {
            ClassB classB = new ClassB();
            classB.setClassCList(new ArrayList<ClassC>());
            for (int j = 0; j < 5; j++) {
                ClassC classC = new ClassC();
                classB.getClassCList().add(classC);
            }
            classA.getClassBList().add(classB);
        }

        removeClassCInstances(classA);
    }


    public static void removeClassCInstances(IRetrieve classA){

        //try removing a specific object from the ClassCList
        //using an instance of ClassA

        List<ClassC> classCList = classA.getClassCList();

        List<ClassC> objectsTobeRemoved = new ArrayList<>();

        for(ClassC classC : classCList){
            if(classC.getIdentifier().equals("1")){
                objectsTobeRemoved.add(classC);
            }
        }

        classCList.removeAll(objectsTobeRemoved);
    }
}

您可以定義API以刪除ClassA中的對象:

public class ClassA {
   ...
   public void removeAll(List<ClassC> objectsToRemove) {
       for(ClassB classB: classBList){
           classB.getClassCList().removeAll(objectsToRemove);
       }
   }
}
classB.getClassCList().removeAll(objectsTobeRemoved);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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