No estoy seguro de cómo hacer esto
class Department {
String deptName;
List<Person> employees;
}
class Person {
String personName;
}
El planteamiento del problema es a buscar el primer nombre de la persona que trabaja en un departamento en particular. Este departamento puede ser opcional. Así que esto es como mi método busca -
String getFirstPerson(Optional<Department> department, String defaultName) {
// TODO:
}
Sé que la forma tradicional de hacer esto, pero me gustaría ver alguna manera de Java 8 + lambda para simplificar esto. Siendo un novato aquí - por lo que Por favor, perdón si no estoy utilizando el formato correcto.
También tengo un nombre por defecto a utilizar en caso de que no encuentra ese valor.
PS Sé que no es la mejor práctica para enviar opcional como parámetro del método. Este no es el código real. Estoy tratando de simplificarlo.
Puede utilizar la map
función de Optional
obtener la lista de los empleados y luego utilizar stream
conseguir el primer nombre o devolución defaultName
. Incluso en caso que si Optional
está vacía obtendrá ladefaultName
String getFirstPerson(Optional<Department> department, String defaultName) {
return department.map(d->d.getEmployees().stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName));
}
Si usted tiene una oportunidad de conseguir null
el getEmployees
que puede utilizar a continuación el enfoque
department.map(Department::getEmployees)
.filter(Objects::nonNull)
.map(emp->emp.stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName)