我不确定该怎么做

class Department {
    String deptName;
    List<Person> employees;
}

class Person {
    String personName;
}

问题陈述是获取在特定部门工作的人的名字。
该部门可以是可选的。这就是我的方法的样子-
String getFirstPerson(Optional<Department> department, String defaultName) {
// TODO:
}

我知道执行此操作的传统方法,但希望看到一些Java 8 + lambda方法来简化此操作。
这里还是一个新手-如果我使用的格式不正确,请原谅。

我也有一个默认名称,以防我们找不到该值。

附言我知道发送Optional作为方法参数不是最佳实践。这不是实际的代码。我只是想简化它。

最佳答案

您可以使用map上的Optional函数获取员工列表,然后使用stream获取名字或返回defaultName。即使Optional为空,您也将获得defaultName

String getFirstPerson(Optional<Department> department, String defaultName) {

   return department.map(d->d.getEmployees().stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName));
}

如果您有机会在null上获取getEmployees,则可以使用以下方法
department.map(Department::getEmployees)
          .filter(Objects::nonNull)
          .map(emp->emp.stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName)

10-06 01:38