Java 通过从其他列表中添加对象从列表中删除对象
我正试图编写一段代码,从ArrayList实例中删除某些对象 体系结构:Java 通过从其他列表中添加对象从列表中删除对象,java,collections,arraylist,removeall,Java,Collections,Arraylist,Removeall,我正试图编写一段代码,从ArrayList实例中删除某些对象 体系结构: public interface IRetrieve { List<ClassC> getClassCList(); } public class ClassA implements IRetrieve { private List<ClassB> classBList; public List<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);
}
}
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);
}
}
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);
}
}
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);
}
}
公共接口IRetrieve{
列出getClassCList();
}
公共类ClassA实现了IRetrieve{
私有列表类列表;
公共列表getClassBList(){
返回类列表;
}
公共无效设置类列表(列表类列表){
this.classBList=classBList;
}
公共列表getClassCList(){
List classCList=new ArrayList();
for(ClassB ClassB:classBList){
addAll(classB.getClassCList());
}
返回classCList;
}
}
公共B类{
私有列表类clist;
公共列表getClassCList(){
返回classCList;
}
公共无效setClassCList(列表classCList){
this.classCList=classCList;
}
}
公共类C类{
私有字符串标识符;
公共字符串getIdentifier(){
返回标识符;
}
公共无效集合标识符(字符串标识符){
this.identifier=标识符;
}
}
公开课考试{
公共静态void main(字符串[]args){
ClassA ClassA=新的ClassA();
setClassBList(新的ArrayList());
对于(int i=0;i<5;i++){
ClassB ClassB=新的ClassB();
setClassCList(newArrayList());
对于(int j=0;j<5;j++){
ClassC ClassC=新的ClassC();
getClassCList().add(classC);
}
classA.getClassBList().add(classB);
}
移除类别(A类);
}
公共静态void removeClassInstances(IRetrieve classA){
//尝试从ClassCList中删除特定对象
//使用ClassA的实例
List classCList=classA.getClassCList();
List 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);
}
}
}
公共类ClassA{
...
public void removeAll(列表objectsToRemove){
for(ClassB ClassB:classBList){
getClassCList().removeAll(objectsToRemove);
}
}
}
我可以访问ClassA的实例,但不能直接引用包含匹配对象的ClassB。我已经用这个更新了我的问题。你应该提供一个简短的解释以及更好的答案的代码。我个人喜欢这种处理删除的方式,我也考虑过这个解决方案。唯一的缺点是,我可能需要迭代ClassA中的所有ClassB实例来删除ClassC实例。从性能的角度来看,有没有更好的方法?更改类中数据的组成谢谢!由于这些类是以这种方式设计的,以满足我的应用程序中的其他需求,因此更改组合对我来说不是一个可行的选择。但是定义一个新的API来循环ClassB对象并删除匹配的ClassC实例对我来说是一个很好的解决方案。接受这个答案。