下記のようにCompanyとEmployeeクラスがあって、Companyのなかに、たくさんEmployeeがある。
Employee.java
public class Employee {
private String id;
private String name;
}
Company.java
public class Company {
private List<Employee> employees = new ArrayList<>();
public Option<Employee> getEmployeeById(String employeeId) {
return employees.stream().filter(e -> e.id.equals(employeeId)).findFirst()
}
public List<Employee> getEmployeeList(List<String> employeeIds) {
}
}
次、employeeIds
のリストでEmployee
のリストを取得したくて、getEmployeeList
を実装したくて、Java8とJava9実装してみる。
Java8.java
public List<Employee> getEmployeeList(Collection<String> employeeIds) {
return employeeIds.stream()
.map(this::getEmployeeById)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(toList());
}
Java9.java
public List<Employee> getEmployeeList(Collection<String> employeeIds) {
return employeeIds.stream()
.map(this::getEmployeeById)
.flatMap(Optional::stream)
.collect(toList());
}
Java 9 のOptional::stream
のおかげで、getEmployeeList
のコードが短くなる。