Java 8 如何在Java8中使用Optional

Java 8 如何在Java8中使用Optional,java-8,optional,Java 8,Optional,对可选的用法有点困惑。 如何使用可选选项获得相同的结果 ModuleEntity module = n.getOutline().getModule()==null?n.getOutline().getParent().getModule():n.getOutline().getModule(); return m.getModule().equals(module) 尝试了很多,但总是NullpointerException… 例如: m.getModule().equals(Optiona

对可选的用法有点困惑。 如何使用可选选项获得相同的结果

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());
List roles=app.getRoles().stream()
.filter(r->RoleType.MODULE.equals(r.getType()))
.collect(Collectors.toList()).stream()
.map(m->{
RoleModel role=entity2models.entity2Model(m);
role.setRoles(app.getRoles().stream())
.filter(o->RoleType.OUTLINE.equals(o.getType()))
.collect(Collectors.toList()).stream()
.filter(n->m.getModule().equals(可选).ofNullable(n.getOutline().getModule()).map(zz->n.getOutline().getModule()).orElse(n.getOutline().getParent().getModule()))
.map(z->entity2Model.entity2Model(z))
.collect(Collectors.toList());
返回角色;})
.collect(Collectors.toList());

如评论中所述,不要仅用
可选的
替换三元语句。有关更多信息,请参见问题

不过,如果您真的想在您的案例中使用
可选的
,您可以:

Optional
  .ofNullable(n.getOutline().getModule())
  .orElseGet(() -> n.getOutline().getParent().getModule());

这里的关键是else语句的延迟计算。我猜当您使用
Optional.ofNullable(…).orElse(…)
时,总是执行
orElse
的内容引发空指针异常。

什么是n?显示该类另一个对象..添加了Complett code如果您告诉您想要实现的目标会更好。@pvpkiran
reuturn a==null?b:c
这就是我想要做的。使用
Optional
仅仅替换三元语句是一种可疑的做法,但是
a==null?b:a
可以写为
可选。不可空(a)。或可空(b)