【问题标题】:How to compare two objects in arraylist and make it as one object如何比较arraylist中的两个对象并将其作为一个对象
【发布时间】:2014-05-02 13:13:44
【问题描述】:

我有一个数组列表

`List<Employee> list = new ArrayList<Employee>()
Employee emp1 = new Employee()
emp1.setEmpNumber("1234");
emp1.setDueAmount("11");
emp1.setAge(20)
Employee emp2 = new Employee()
emp2.setEmpNumber("1234");
emp2.setDueAmount("14");
emp2.setAge(20)
Employee emp3 = new Employee()
emp3.setEmpNumber("567");
emp3.setDue("11");
emp3.setAge(20)
Employee emp4 = new Employee()
emp4.setEmpNumber("891");
emp4.setDueAmount("11");
emp4.setAge(20)
Employee emp5 = new Employee()
emp5.setEmpNumber("1234");
emp5.setDueAmount("14");
emp5.setAge(20)`

在列表中,有三名员工的编号相同,但应付金额不同。 如何通过检索列表来比较员工编号并添加到期金额并将该对象作为单个对象?

【问题讨论】:

  • 您更新一个并删除另一个。重复直到完成。
  • 那家公司的数据库使用什么?

标签: java collections arraylist


【解决方案1】:

使用 SortedSet 来忽略

SortedSet<Employee > employee = new TreeSet<Employee >(new Comparator<Person>() {
    @Override
    public int compare(Employee arg0, Employee arg1) {
        return arg0.getEmpNumber().compareTo(arg1.getEmpNumber());
    }
});

 if(employee.contains(emp1)){
   // iterate over employee find Employee  object with same number and add due in that object    
 }else{
     employee.add(emp1); // ..etc    
 }

现在,如果您将 Employee 插入到您的 employee 中,则不会插入重复项(基于他们的 emp 编号)。

IfAnd 然后您可以遍历员工找到具有相同编号的员工对象并在该对象中添加到期

【讨论】:

    【解决方案2】:

    我会遍历列表,使用地图存储员工(以员工编号作为键)并即时更新到期金额。

    编辑: 未经测试,但应按以下方式工作:

    final Map<String, Employee> empMap = new HashMap<String, Employee>(); 
    
    for (final Employee employee : list) {
      final String key = employee.getEmpNumber();
      if (empMap.containsKey(key)) {
        empMap.get(key).addDue(employee.getDue());
      } else {
        empMap.put(key, employee);
      }
    }
    
    list.clear(); 
    list.addAll(empMap.values());
    

    【讨论】:

    • 现在对象的大小是 5 添加到期金额后我想删除列表中剩余的两个对象,请您放置代码如何操作
    • 之后,您可以将列表的内容替换为地图的内容(它提供了仅提供包含值的集合的方法)。
    • 我在上面的回答中提供的代码。
    • @user3575404 请更新您的帖子,而不是在 cmets 中发布长代码 ;)
    • 如果我的列表有超过 10000 条记录,那么这将是一个性能问题,对吧?
    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    相关资源
    最近更新 更多