【问题标题】:How copy property of ArrayList in another property of other ArrayList with different property name?如何将 ArrayList 的属性复制到具有不同属性名称的其他 ArrayList 的另一个属性中?
【发布时间】:2020-09-24 22:08:42
【问题描述】:

如何将company的值复制到:

列出人员列表

enterprise的:

列出员工名单

使用 Java-8?

我有:

@Getter
@Setter
public class Person {
    private String name;
    private String company;

}

还有:

@Getter
@Setter
public class Employee {
    private String name;
    private String enterprise;

}
List<Person> personList
List<Employee> employeeList

我无法更改enterprise 的属性名称。

【问题讨论】:

  • 您是否要向employeeList 添加一个新员工,该员工是从personList 中的一个人创建的?请澄清。
  • 寻找map Streams的操作。
  • @DavidLeon 你的问题解决了吗?

标签: java arraylist java-8 java-stream


【解决方案1】:

我假设Employee 有一个类似Employee(String name, String enterprise) 的构造函数

您可以使用stream().map()Person 对象转换为Employee,然后在列表中收集新的Employee 实例。

试试这个:

List<Employee> employeeList = personList.stream().map(p -> new Employee(p.getName(), p.getCompany()))
        .collect(Collectors.toList());

【讨论】:

    【解决方案2】:

    您可以使用 Lombok 框架中的一些其他方法,例如 Builder

    另外,您可以创建一个实用程序类来将Person 转换为Employee

    您使用 Stream API 的实现将是:

    List<Person> personList = List.of(Person.builder()
                    .name("name1")
                    .company("company1")
                    .build(),
            Person.builder()
                    .name("name2")
                    .company("company2")
                    .build());
    
    System.out.println(personList);
    
    List<Employee> employeeList = personList.stream()
            .map(EmployeeConverter::convertToEmployee)
            .collect(Collectors.toList());
    
    System.out.println(employeeList);
    

    输出:

    [人(姓名=姓名1,公司=公司1),人(姓名=姓名2,公司=公司2)] [员工(姓名=姓名1,企业=公司1),员工(姓名=姓名2,企业=公司2)]

    其他代码详情:

    @UtilityClass
    class EmployeeConverter {
        public Employee convertToEmployee(Person person) {
            return Employee.builder()
                    .name(person.getName())
                    .enterprise(person.getCompany())
                    .build();
        }
    }
    
    @Getter
    @Setter
    @Builder
    @ToString
    class Person {
        private String name;
        private String company;
    }
    
    @Getter
    @Setter
    @Builder
    @ToString
    class Employee {
        private String name;
        private String enterprise;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 2021-01-13
      • 2014-07-06
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 2018-07-05
      相关资源
      最近更新 更多