对Optional的使用有点困惑。 如何使用Optional获得相同的结果?
ModuleEntity module = n.getOutline().getModule()==null?n.getOutline().getParent().getModule():n.getOutline().getModule();
return m.getModule().equals(module)
尝试了很多,但总是NullpointerException...
例如:
m.getModule().equals(Optional.ofNullable(n.getOutline().getModule()).orElse(n.getOutline().getParent().getModule())))
以下是完整的代码:
List<RoleModel> roles = app.getRoles().stream()
.filter(r -> RoleType.MODULE.equals(r.getType()))
.collect(Collectors.toList()).stream()
.map(m -> {
RoleModel role = Entity2ModelUtils.entity2Model(m);
role.setRoles(app.getRoles().stream()
.filter(o -> RoleType.OUTLINE.equals(o.getType()))
.collect(Collectors.toList()).stream()
.filter(n -> m.getModule().equals(Optional.ofNullable(n.getOutline().getModule()).map(zz->n.getOutline().getModule()).orElse(n.getOutline().getParent().getModule())))
.map(z -> Entity2ModelUtils.entity2Model(z))
.collect(Collectors.toList()));
return role;})
.collect(Collectors.toList());
答案 0 :(得分:3)
正如评论中所述,不要仅使用Optional
来替换三元语句。有关详细信息,请参阅问题Uses for Optional。
虽然如果你真的想在你的案例中使用Optional
,你可以这样做:
Optional
.ofNullable(n.getOutline().getModule())
.orElseGet(() -> n.getOutline().getParent().getModule());
这里的关键是对else语句的懒惰评估。我想当你使用Optional.ofNullable(...).orElse(...)
时,始终执行的orElse
内容会抛出nullpointer异常。