Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java8流api进行数组列表的深度复制,但得到构建时错误_Java_Java 8_Lombok - Fatal编程技术网

使用Java8流api进行数组列表的深度复制,但得到构建时错误

使用Java8流api进行数组列表的深度复制,但得到构建时错误,java,java-8,lombok,Java,Java 8,Lombok,我在spring boot项目的模型类中使用库 @Data @Builder public class Employee { private String fullname; private long someNumber; private boolean isManager; } 在另一个班级,我有一份员工名单: List<Employee> employeeList = getListOfEmployees(); List<Employee&g

我在spring boot项目的模型类中使用库

@Data
@Builder
public class Employee {

    private String fullname;
    private long someNumber;
    private boolean isManager;
}
在另一个班级,我有一份员工名单:

List<Employee> employeeList = getListOfEmployees();
List<Employee> employeeListCopy = employeeList.stream().map(Employee::new).collect(Collectors.toList());
第二步。我使用Java 8 stream API创建员工列表的深度副本:

List<Employee> employeeList = getListOfEmployees();
List<Employee> employeeListCopy = employeeList.stream().map(Employee::new).collect(Collectors.toList());

为什么??如何为我的深度复制消除此错误?

问题不在于流API,而在于
lombok
。使用
@Builder
时,将调用构造函数:

public Employee build() {
      return new Employee(fullname, someNumber, isManager);
}
EmployeeBuilder
(lombok将生成)。由于您已经提供了一个构造函数,lombok将不会生成另一个构造函数(即:如果尚未定义构造函数,lombok将只为该构造函数生成所需的构造函数)。解决方案非常简单,将
@allargsconstuctor
添加到类中

一般来说,我个人并不喜欢
@Builder
,我使用
@Accessors(chain=true)

@Setter
@Getter
@Accessors(chain = true)
static class Employee {

    private String fullname;
    private long someNumber;
    private boolean isManager;

    public Employee() {

    }

    // copy constructor
    public Employee(Employee employee) {
        fullname = employee.fullname;
        someNumber = employee.someNumber;
        isManager = employee.isManager;
    }
}
你可以做到:

Employee emp = new Employee()
        .setFullname("")
        .setManager(false)
        .setSomeNumber(2L);

Employee::new
确实需要参数,不确定此参考api,但请尝试这样:
Employee::new(it)
new Employee(it)
@MarcosVasconcelos如果出现编译器错误,请尝试一下。好的,那么:
stream().map(it->new Employee(it))
它能为您解决问题吗?不,请查看答案。是的,我猜应该是龙目山引起的问题。我不知道是这个。谢谢