如何比较arraylist中的两个对象并将其作为一个对象

时间:2014-05-02 13:13:44

标签: java collections arraylist

我有一个数组列表

`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)`

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

2 个答案:

答案 0 :(得分:0)

使用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    
 }

现在,如果您将员工插入员工,则不会插入重复项(基于其号码)。

IfAnd然后你可以迭代员工查找具有相同编号的Employee对象并在该对象中添加到期

答案 1 :(得分:-1)

我会浏览列表,使用地图存储员工(员工编号为关键字)并动态更新到期日。

编辑: 没有经过测试,但它应该如下工作:

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());