[英]Removing objects from a list consolidated by adding objects from other lists
我正在嘗試編寫代碼以從ArrayList的實例中刪除某些對象。
建築:
代碼目的:
代碼問題:
當我在“classCList.removeAll(objectsTobeRemoved);”行中的類“Test.java”中調用.removeAll時 ,代碼實際上從ClassA實例的arraylist中刪除了對象,這些對象是由ClassA的API“getClassCList”返回的,而不是從ClassB對象中的ClassCList返回的。 我如何從ClassB中的ClassC列表中刪除ClassC實例?
更新 :我只能訪問我可以使用的ClassA實例。
更新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.