我不知道该怎么做
class Department {
String deptName;
List<Person> employees;
}
class Person {
String personName;
}
问题陈述是获取在特定部门工作的人员的名字。 这个部门可以是可选的。这就是我的方法的样子 -
String getFirstPerson(Optional<Department> department, String defaultName) {
// TODO:
}
我知道执行此操作的传统方法,但希望看到一些 Java 8 + lambda 方法来简化此操作。 在这里还是个新手 - 如果我使用的格式不正确,请原谅。
我还有一个默认名称,以防我们找不到该值。
附言我知道将 Optional 作为方法参数发送不是最佳做法。这不是实际的代码。我只是想简化它。
最佳答案
您可以在Optional
上使用map
函数获取员工列表,然后使用stream
获取名字或返回默认名称
。即使 Optional
为空,您也会得到 defaultName
String getFirstPerson(Optional<Department> department, String defaultName) {
return department.map(d->d.getEmployees().stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName));
}
如果您有机会在 getEmployees
上获得 null
,您可以使用以下方法
department.map(Department::getEmployees)
.filter(Objects::nonNull)
.map(emp->emp.stream().map(Person::getPersonName).findFirst().orElse(defaultName)).orElse(defaultName)
关于Java 8 - Optional<CustomizedObject> 获取 CustomizedObject 中列表的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58172639/