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());
我通常会使用嵌套版本,因为嵌套管道一点也不难理解。
我是 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());
我通常会使用嵌套版本,因为嵌套管道一点也不难理解。