Java中向列表中添加多个NULL

玛丽有生命

我有2个列表,想要将某些元素从一个元素复制到另一个元素,即有新老员工列表,我需要合并2个列表并删除包含在旧列表中但不包含在新列表中的元素。

我可以通过使用TreeSet解决覆盖并集和交集的部分,并覆盖Employees类的equals和hashcode函数...。

现在,我要排除旧的元素,而不是新的元素,然后将它们添加到“ deletedList” ...中。我得到了“ ConcurrentModificationException”

我尝试了此方法,而不是“ iterator”,但结果相同:for(Employees e:employeeListDB)

我也尝试了“ CopyOnWriteArrayList”而不是“ ArrayList”,但是没有改变!

但是现在的问题是,在空列表“ deletedList”的初始化时,在添加功能之前,它用多个空元素填充了!

这是代码:

List<Employees> employeesListDB = this.findAll();     

Set<Employees> empSet = new TreeSet<Employees>(new EmployeeComparator());
empSet.addAll(employeesList);

List<Employees> deletedList = new ArrayList<Employees>();
Employees e = new Employees();

ListIterator<Employees> itr = employeesListDB.listIterator();    
for(itr.hasNext()) { 
  e = (Employees)itr.next();
  if(!empSet.contains(e)) {
    deletedList.add(e);
  }               
}

一个反例:

旧列表“ employeesListDB”从数据库中列出了雇员列表:

[  
    {  
        "email":"[email protected]"
    },
    {  
        "email":"[email protected]"
    },
    {  
        "email":"[email protected]"
    },
    {  
        "email":"[email protected]"
    },
    {  
        "email":"[email protected]"
    },
    {  
        "email":"[email protected]"
    }
]

要添加的新列表:

[  
    {  
        "email":"[email protected]"
    },
    {  
        "email":"[email protected]"
    },
    {  
        "email":"[email protected]"
    }  

]

我想要的已删除列表:

[
{
“ email”:“ [email protected]”},{
“ email”:“ [email protected]”},{
“ email”:“ [email protected]”} ,{
“ email”:“ [email protected]”},{
“ email”:“ [email protected]”}]

萨拉邮件将被更新...

Employee类有两个字段{id,email},新列表(要添加到db的列表)是仅电子邮件的列表,id字段尚未识别,但旧列表具有完整的bean字段...进行比较在这两个列表之间,我应该重写比较器以忽略id字段;在忽略字段的列表中查找重复项

只是我需要知道,为什么当我使用set.add操作时,它仅添加唯一的电子邮件!将列表添加到集合中后,列表的原始大小为36个元素!

 Set<Employees> oldSet = new TreeSet<Employees>(new EmployeeComparator());
        oldSet.addAll(employeesListDB);

        Set<Employees> newSet = new TreeSet<Employees>(new EmployeeComparator());
        newSet.addAll(employeesList);


        Set<Employees> deleted = Sets.difference(oldSet, newSet);
griFlo

以这种方式尝试(制作一个小型TestCase):

private static Employee createEmployee(String string) {
    Employee employee = new Employee();
    employee.setEmail(string);
    return employee;
}

public static void main(String[] args)  {

    List<String> newMails = new ArrayList<>();
    List<Employee> oldList = new ArrayList<>();

    oldList.add(createEmployee("[email protected]"));
    oldList.add(createEmployee("[email protected]"));
    oldList.add(createEmployee("[email protected]"));
    oldList.add(createEmployee("[email protected]"));
    oldList.add(createEmployee("[email protected]"));
    oldList.add(createEmployee("[email protected]"));

    newMails.add("[email protected]");
    newMails.add("[email protected]");
    newMails.add("[email protected]");

    List<Employee> delete = new ArrayList<>();
    Set<String> removedMails = new HashSet<>();

    for (Employee emp : oldList) {
        if (!newMails.contains(emp.getEmail())) {
            delete.add(emp);
        }
        removedMails.add(emp.getEmail());
    }
    newMails.removeAll(removedMails);
    // remove emploeyees in delete
    oldList.removeAll(delete);

    // Create employee for left MAils
    for (String newMail : newMails) {
        oldList.add(createEmployee(newMail));
    }

    //Old and new Employees
    for (Employee emp : oldList) {
        System.out.println(emp.getEmail());
    }

}

简单的Employee类:

class Employee {
String email;

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

}

输出:

[email protected]
[email protected]
[email protected]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Rcpp中向对象添加多个类?

来自分类Dev

如何在Android中向窗口管理器添加多个视图

来自分类Dev

向NHibernate查询中添加多个ORDER BY子句会引发异常

来自分类Dev

如何在C#中向字典添加多个值

来自分类Dev

Java向JFrame中添加多个JPanel对象

来自分类Dev

如何在Java的同一列表中添加多个对象类型

来自分类Dev

如何在vnext启动文件中向一项服务添加多个实现?

来自分类Dev

在列表视图行中添加多个可点击区域

来自分类Dev

添加多个列表

来自分类Dev

如何在Flask中向会话添加多个项目

来自分类Dev

如何在短代码中向wp_query添加多个自定义字段?

来自分类Dev

是否可以在列表理解中添加多个元素?

来自分类Dev

如何从JavaScript中的函数向对象添加多个键和值?

来自分类Dev

我可以在Java的CardLayout中添加多个框架吗?

来自分类Dev

如何在Python中向字典键添加多个值

来自分类Dev

在Django Rest Framework中向JSON响应添加多个模型和自定义字段

来自分类Dev

在networkx中添加多个有向边

来自分类Dev

在networkx中添加多个有向边

来自分类Dev

在列表框行中添加多个项目

来自分类Dev

在SimpleXMLElement中向子级添加多个属性

来自分类Dev

如何在jMeter中向参数添加多个值

来自分类Dev

尝试在Java中向数组添加多个双打

来自分类Dev

以编程方式向wpf dgv中的行中添加多个具有样式的DataGridCell

来自分类Dev

如何使用java中的方法添加多个数字?

来自分类Dev

尝试从网站上的列表中添加多个选择

来自分类Dev

向字典中添加多个键(python)

来自分类Dev

如何在列表理解中添加多个变量

来自分类Dev

列表理解:通过在单个列表中添加多个值来创建新列表

来自分类Dev

向表中的单元格添加多个下拉列表时,“无法将某些控件添加到此位置”

Related 相关文章

  1. 1

    如何在Rcpp中向对象添加多个类?

  2. 2

    如何在Android中向窗口管理器添加多个视图

  3. 3

    向NHibernate查询中添加多个ORDER BY子句会引发异常

  4. 4

    如何在C#中向字典添加多个值

  5. 5

    Java向JFrame中添加多个JPanel对象

  6. 6

    如何在Java的同一列表中添加多个对象类型

  7. 7

    如何在vnext启动文件中向一项服务添加多个实现?

  8. 8

    在列表视图行中添加多个可点击区域

  9. 9

    添加多个列表

  10. 10

    如何在Flask中向会话添加多个项目

  11. 11

    如何在短代码中向wp_query添加多个自定义字段?

  12. 12

    是否可以在列表理解中添加多个元素?

  13. 13

    如何从JavaScript中的函数向对象添加多个键和值?

  14. 14

    我可以在Java的CardLayout中添加多个框架吗?

  15. 15

    如何在Python中向字典键添加多个值

  16. 16

    在Django Rest Framework中向JSON响应添加多个模型和自定义字段

  17. 17

    在networkx中添加多个有向边

  18. 18

    在networkx中添加多个有向边

  19. 19

    在列表框行中添加多个项目

  20. 20

    在SimpleXMLElement中向子级添加多个属性

  21. 21

    如何在jMeter中向参数添加多个值

  22. 22

    尝试在Java中向数组添加多个双打

  23. 23

    以编程方式向wpf dgv中的行中添加多个具有样式的DataGridCell

  24. 24

    如何使用java中的方法添加多个数字?

  25. 25

    尝试从网站上的列表中添加多个选择

  26. 26

    向字典中添加多个键(python)

  27. 27

    如何在列表理解中添加多个变量

  28. 28

    列表理解:通过在单个列表中添加多个值来创建新列表

  29. 29

    向表中的单元格添加多个下拉列表时,“无法将某些控件添加到此位置”

热门标签

归档