Java 8个可选,组合语句

Java 8 Optionals, Combining Statements

我是 Java 8 个可选项的新手,我想知道是否有办法将这两个语句合并为一个,同时保留可选项?

public List<String> getEmployeeStreetNames(Employee employee){
     List<Addresses> addresses = Optional.ofNullable(employee)
     .map(Employee::getAddresses)
      .orElse(new ArrayList<>());

   return addresses.stream()
       .map(Address::getStreetName)
       .collect(Collectors.toList())
}

非常感谢任何帮助。

首先,避免在 orElse 这样的“可能”管道步骤中创建新对象;你总是会产生创建参数的开销,即使它没有被使用。更喜欢像 Supplier<T> 这样的签名,或者在本例中是 Collections.emptyList()。 (这 尤其是 对于异常很重要;始终使用 MyException::new() -> new MyException(foo)。)

在这种情况下,有两种处理管道的方法,可以是嵌套的,也可以是连续的。

return Optional.ofNullable(employee)
    .map(Employee::getAddresses)
    .map(a -> a.stream().map(Address::getStreetName).collect(toList()))
    .orElse(emptyList());

return Optional.ofNullable(employee)
    .map(Employee::getAddresses)
    .orElse(emptyList())
    .stream()
    .map(Address::getStreetName)
    .collect(toList());

我通常会使用嵌套版本,因为嵌套管道一点也不难理解。