从一个列表中删除数据,而另一个列表数据函数不能正常工作


public static void getIndividualsList() {
List<Employee> individualList = new ArrayList<>();
Employee individualDtls = new Employee();
individualDtls.setDependentId(0);
individualDtls.setDateOfBirth("06/06/1998");
individualDtls.setEeId(1L);
individualDtls.setFullName("MICHAEL K HERNANDEZ");
individualDtls.setCovered(false);
individualDtls.setDependentType("Self");
individualList.add(individualDtls);
List<Employee> individualList1 = new ArrayList<>();
Employee individualDtls1 = new Employee();
individualDtls1.setDependentId(0);
individualDtls1.setDateOfBirth("06/06/1998");
individualDtls1.setEeId(1L);
individualDtls1.setFullName("MICHAEL K HERNANDEZ");
individualDtls1.setCovered(false);
individualDtls1.setDependentType("Self");
individualList1.add(individualDtls1);
individualList.removeAll(individualList1);

for (Employee employee : individualList) {
System.out.println(employee.getDateOfBirth());
}
}

为什么removeAll不能正常工作?

应用removeAll,但仍在获取数据。有人能让我知道为什么它不工作?

根据您的评论:"在雇员类中有限制。它不允许添加任何其他方法或比较器。这就是问题所在。

如果您有任何唯一的字段,也许您可以使用该字段遍历您的第一个列表以删除所需的项。

import java.util.*;
public class MyClass {

public static void main(String args[]) {
List<Employee> listA = new ArrayList<>();
listA.add(new Employee("gokul", "1", "gokul@domain.com"));
listA.add(new Employee("user", "2", "user@domain.com"));

List<Employee> listB = new ArrayList<>();
listB.add(new Employee("user", "2", "user@domain.com"));

for (Employee eB : listB) {
for (Employee eA : listA) {
if (eA.id.equals(eB.id)) {
listA.remove(eA);
break;
}
}
}

for (Employee e : listA) {
System.out.println(e.name);
}
}

static class Employee {
String name;
String id;
String email;

public Employee(String name, String id, String email) {
this.name = name;
this.id = id;
this.email = email;
}
}
}

removeremoveAll都依赖于equal(和hashCode!)的实现。很可能您没有实现这些方法中的任何一个。

如果没有自定义的equal实现,对象只等于他自己。两个变量必须引用完全相同的对象才能相等。自定义实现如下所示:

class Employee {
....
public boolean equals(Object obj) {
if (obj instanceof Employee) {
Employee oo = (Employee)obj;
return Objects.equal(fullName, oo.fullName) && Objects.equal(dateOfBirth, oo.dateOfBirth)
} else {
return false;
}
}
public int hashCode() {
return Objects.hashCode(fullName, dateOfBirth);
}
}

我取fullNamedateOfBirth以确保相等。你必须手动添加所有你认为重要的字段,使两个对象相等(剧透-这不是微不足道的)。


如果不能修改对象Employee,则有以下两种方法:

  • 按照"Gokul Nath KP">
  • 手动执行
  • 采取一些其他结构代替ArrayList集合。例如,TreeSet使用可选提供的自定义Comparator实例而不是equal-Method。

相关内容

  • 没有找到相关文章

最新更新