|
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