使用Java8流api进行数组列表的深度复制,但得到构建时错误
我在spring boot项目的模型类中使用库使用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
@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))
它能为您解决问题吗?不,请查看答案。是的,我猜应该是龙目山引起的问题。我不知道是这个。谢谢