删除具有另一个类列表的元素的类的元素

时间:2018-03-21 02:12:48

标签: java list class removeall

我有这两个类:

public class Table {
    String tableName;
    private List <Column> columns;
}

public class Column {
    String columnName;
}

我创建了两个Table类列表:

List<Table> table1 = new ArrayList<Table>();
List<Table> table2 = new ArrayList<Table>()

从Oracle DB获得此列表的值。

table1 = tableDao.ListTabColumns();
table2 = tableDao.ListTabColumns();

我尝试过removeAll并且无效。

table1.removeAll(table2);

并且...... Set<Table>removeAll也不起作用。

Set<Table> t1 = new HashSet<Table>(table1);
Set<Table> t2 = new HashSet<Table>(table2);
t1.removeAll(t2); 

我试图在contains中使用table1的{​​{1}}而不是table2

唯一有效的方法是List的每个元素的内部循环,以及List的每个元素的内部循环之后。

for(Table t : table1) {
    for(Table x : table2) {
        System.out.println(t.getTableName());
        for(Column c : x.getColumn()) {
            for (Column d : t.getColumn()) {
                // Something to display if not contain any equals.
            }
        }
    }
}

但我不认为这是最好的方法。 有人可以帮帮我吗? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

我做了这个覆盖并且工作正常:

@Override
    public boolean equals(Object obj) {
    if (obj == null)
         return false;
    if (!(obj instanceof Column))
         return false;
    Column c = (Column) obj;
    return this.columnName == null ? false : this.columnName.equals(c.columnName);
    }

@Override
    public int hashCode() {
        return this.columnName == null ? 0 : this.columnName.hashCode();
    }

非常感谢,MichałPiątkowski