[英]Can I use map to set the value for other objects in java8 stream?
Am I allowed to write code this way?我可以这样写代码吗?
Can I use setter inside map method to set the values to other objects using stream?我可以在 map 方法中使用 setter 来使用 stream 将值设置为其他对象吗?
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(csvPath))) {
List<Employee> employees = bufferedReader
.lines()
.skip(1)
.map(l -> {
String[] lines = l.split(",");
Employee employee = new Employee();
employee.setEmployeeId(Long.parseLong(lines[0]));
employee.setFullName(lines[1] + " " + lines[2] + " " + lines[3]);
employee.setGender(lines[4]);
employee.setEmail(lines[5]);
employee.setSalary(Double.parseDouble(lines[6]));
employee.setState((lines[7]));
return employee;
}).collect(Collectors.toList());
Yes, you can.是的你可以。 Although I wouldn't recommend that.虽然我不建议这样做。
Just extract that logic into a separate method instead:只需将该逻辑提取到单独的方法中即可:
Employee parseEmployee(String line) {
String[] columns = line.split(",");
Employee employee = new Employee();
employee.setEmployeeId(Long.parseLong(columns[0]));
employee.setFullName(columns[1] + " " + columns[2] + " " + columns[3]);
employee.setGender(columns[4]);
employee.setEmail(columns[5]);
employee.setSalary(Double.parseDouble(columns[6]));
employee.setState((columns[7]));
return employee;
}
then just pass the method reference into map
:然后只需将方法引用传递给map
:
List<Employee> employees = bufferedReader.lines()
.skip(1)
.map(this::parseEmployee)
.collect(toList());
This will make your code much more readable and easier to maintain.这将使您的代码更具可读性和更易于维护。
I will recommend to move the logic into Employee
constructor我会建议将逻辑移动到Employee
构造函数中
public Employee(String[] lines) {
this.employeeId = Long.parseLong(lines[0]);
this.fullName = lines[1] + " " + lines[2] + " " + lines[3];
this.gender = lines[4];
this.email = lines[5];
this.salary = Double.parseDouble(lines[6]);
this.state = lines[7];
}
And then just use the constructor for creating Employee
object然后只需使用构造函数创建Employee
object
List<Employee> employees = bufferedReader
.lines()
.skip(1)
.map(l-> l.split(","))
.map(Employee::new)
.collect(Collectors.toList());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.