Java 8 - Optional<CustomizedObject> 获取 CustomizedObject 中列表的第一个元素

标签 java java-8 option-type

我不知道该怎么做

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/

相关文章:

java - Spring /hibernate/Oracle : ORA-02289 Sequence Does Not Exist?

java - 在服务器中隐藏 key 或外部化应用程序属性

c# - 从 C# 调用时将记录选项返回为 null

java - 如何仅将属性设置为 android 的搜索栏缩略图?

java - 哪种 Oracle JDBC 驱动程序与 Java 一起使用来开发 Web 应用程序

java - 在 jdk 8 中的接口(interface)上定义静态(非继承)方法的正确语法是什么?

java - (Spring boot)Optional<>Class可以像List<>Class一样吗?

java - 如何在Optional中抛出自定义异常

java - 尝试在 'id in R' 中添加符号时出现 IDE 错误

java - 如何使用java8获取字符串列表?