我不确定该怎么做
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)