|
1 | 1 | import java.util.List; |
2 | 2 | import java.util.ArrayList; |
3 | 3 | import java.util.Optional; |
4 | | -import java.util.stream.*; |
5 | | - |
6 | 4 |
|
7 | 5 | class EmployeeService { |
8 | | - |
9 | | - public List<Optional<Employee>> getAllTheEmployeesById() { |
10 | | - return getAllTheEmployeesById() |
11 | | - .stream() |
12 | | - .map(employee -> Optional.ofNullable(employee)) |
13 | | - .collect(Collectors.toList()); |
| 6 | + |
| 7 | + // This list is populated in the tests |
| 8 | + private List<Optional<Employee>> nullableEmployeesList = new ArrayList<>(); |
| 9 | + |
| 10 | + public EmployeeService(List<Optional<Employee>> listOfEmployees) { |
| 11 | + nullableEmployeesList = listOfEmployees; |
14 | 12 | } |
15 | 13 |
|
16 | 14 | public Optional<Employee> getEmployeeById(int employeeId) { |
17 | | - /* Solution using Streams |
18 | | - |
19 | | - return getAllTheEmployeesById(employeesList).stream() |
20 | | - .filter(employee -> employee.getId() == id) |
21 | | - .orElse("Employee not found"); |
22 | | - */ |
23 | | - |
24 | | - return Optional.ofNullable(getEmployeeById(employeeId)); |
| 15 | + return nullableEmployeesList |
| 16 | + .stream() |
| 17 | + .flatMap(employee -> employee.stream()) |
| 18 | + .filter(employee -> employee.getNullableId() |
| 19 | + .map(id -> id == employeeId) |
| 20 | + .orElse(false)) |
| 21 | + .findFirst(); |
25 | 22 | } |
26 | 23 |
|
27 | | - public String printAllEmployeesNamesById() { |
28 | | - List<Optional<Employee>> nullableEmployeesList = getAllTheEmployeesById(); |
| 24 | + /* I could use IntStream.range(0, nullableEmployeesList.size()) instead of a for loop, but |
| 25 | + understanding the Optional API is difficult enough. |
| 26 | + I do not use method references for the same reason. */ |
| 27 | + public String printAllEmployeesNames() { |
29 | 28 | StringBuilder stringBuilder = new StringBuilder(); |
30 | 29 | for (int i = 0; i < nullableEmployeesList.size(); i++) { |
31 | 30 | stringBuilder.append(i).append(" - "); |
32 | 31 |
|
33 | 32 | nullableEmployeesList.get(i) |
34 | | - .flatMap(employee -> employee.getName()) |
35 | | - .ifPresentOrElse( |
36 | | - name -> stringBuilder.append(name).append("\n"), |
37 | | - () -> stringBuilder.append("No employee found\n") |
38 | | - ); |
| 33 | + .flatMap(employee -> employee.getNullableName()) |
| 34 | + .ifPresentOrElse( |
| 35 | + name -> stringBuilder.append(name).append("\n"), |
| 36 | + () -> stringBuilder.append("No employee found\n") |
| 37 | + ); |
39 | 38 | } |
40 | 39 | return stringBuilder.toString(); |
41 | 40 | } |
42 | 41 |
|
43 | 42 | public String printEmployeeNameAndDepartmentById(int employeeId) { |
44 | | - |
45 | | - var employee = getEmployeeById(employeeId); |
| 43 | + Optional<Employee> employee = getEmployeeById(employeeId); |
46 | 44 | StringBuilder stringBuilder = new StringBuilder(); |
47 | 45 | stringBuilder.append(employeeId).append(" - "); |
| 46 | + // Handle Optional values |
48 | 47 | employee.ifPresentOrElse( |
49 | | - e -> { |
50 | | - // Handle Optional values |
51 | | - e.getName().ifPresentOrElse( |
52 | | - name -> stringBuilder.append(name).append(" - "), |
53 | | - () -> {} |
54 | | - ); |
55 | | - e.getDepartment().ifPresentOrElse( |
56 | | - department -> stringBuilder.append(department), |
57 | | - () -> {} |
58 | | - ); |
59 | | - }, |
60 | | - () -> stringBuilder.append("No employee found") |
| 48 | + e -> { |
| 49 | + e.getNullableName().ifPresent(name -> |
| 50 | + e.getNullableDepartment().ifPresent(department -> |
| 51 | + stringBuilder.append(name).append(" - ").append(department) |
| 52 | + ) |
| 53 | + ); |
| 54 | + }, |
| 55 | + () -> stringBuilder.append("No employee found") |
61 | 56 | ); |
62 | 57 | return stringBuilder.toString(); |
63 | | - } |
| 58 | + } |
64 | 59 |
|
65 | 60 | } |
66 | | - |
0 commit comments