【问题标题】:Merging two lists in to one list using java使用java将两个列表合并为一个列表
【发布时间】:2021-03-19 17:02:55
【问题描述】:

我的员工详细信息如下。我需要根据 id 合并这些详细信息。

Employee e1 = new Employee(1,20.5, "REGULAR")
Employee e2 = new Employee(2,22.5,"REGULAR")
Employee e3 = new Employee(3, 24.5,"CONTRACT")
List<Employee> employee1 = [e1,e2,e3]

Employee e4 = new Employee(4,20.5, "REGULAR")
Employee e5 = new Employee(2,22.5,"REGULAR")
Employee e6 = new Employee(5, 24.5,"CONTRACT")
List<Employee> employee2 = [e4,e5,e6]

Final result should be as List<Employee> employee3 = [e1,e2,e3,e4,e6] ```

Here e2 and e5 are having same details. We need to merge them and add it to e2 only with below details
Employee e2 = new Employee(2,45,"REGULAR")

45 is sum of e2 and e5.

【问题讨论】:

    标签: list merge


    【解决方案1】:

    这个问题分为两部分:

    1. 合并两个列表:这很容易使用addAll() 方法完成。

    2. 如果Employee 对象值相同,则自定义聚合:有多种方法可以做到这一点。

      2.1 使用Set容器并为Employee对象定义Equals和HashCode:您可以将一个列表中的所有元素放入HashSet中,然后添加元素从第二个列表中检查元素是否已存在于HashSet 中。如果是这样,您可以将其删除并将值聚合到一个新元素中并将其添加到一个集合中。

      Employee e1 = new Employee(1,20.5, "REGULAR")
      Employee e2 = new Employee(2,22.5,"REGULAR")
      Employee e3 = new Employee(3, 24.5,"CONTRACT")
      Set<Employee> employee1 = [e1,e2,e3]
      
      Employee e4 = new Employee(4,20.5, "REGULAR")
      Employee e5 = new Employee(2,22.5,"REGULAR")
      Employee e6 = new Employee(5, 24.5,"CONTRACT")
      List<Employee> employee2 = [e4,e5,e6]
      
      for (Employee employee : employee2) {
           if (employee1.contains(employee)) {
               // or some other logic
               employee1.remove(employee)
               // assuming for new Employee(1,20.5, "REGULAR")
               // 1 is SerialNumber, 20.5 is Pay and "REGULAR" is 
               // EmploymentType
               employee1.add(new Employee(employee.getSerialNumber, 
                   employee.getPay()*2, employee.getEmployementType()));
           }
      }
      // convert back to ArrayList if you want
      List<String> employee3 = new ArrayList<String>();
      employee3.addAll(employee1);
      
      

      2.2 创建自定义容器:使用add 方法创建自定义容器,验证对象是否存在,如果存在,则该方法为您进行一些聚合。这类似于 2.1,但使用 (customContainer.add()) 会更整洁。

    【讨论】:

      猜你喜欢
      • 2014-01-27
      • 2015-04-01
      • 2014-04-01
      • 1970-01-01
      • 2021-04-04
      • 2019-02-05
      • 2014-01-03
      相关资源
      最近更新 更多