Java 修改可选的<;人>;如有

Java 修改可选的<;人>;如有,java,java-8,optional,Java,Java 8,Optional,我有一个场景,在这个场景中,我从DB获得了一个可选的person,我需要将person修改为person.setRole(“Admin”),如果该person存在,并在我的MainClass.java中进行设置 我试过: var p = person.map(person1 -> person1.setRole("Admin")); 但这似乎不正确。 我想更新同一个对象,而不是创建一个新对象 编辑: 在设置值之后,我需要设置这个person对象,因为它是Departm

我有一个场景,在这个场景中,我从DB获得了一个
可选的person
,我需要将
person
修改为
person.setRole(“Admin”)
,如果该person存在,并在我的
MainClass.java
中进行设置

我试过:

var p = person.map(person1 -> person1.setRole("Admin"));
但这似乎不正确。 我想更新同一个对象,而不是创建一个新对象

编辑:

在设置值之后,我需要设置这个person对象,因为它是Department类中的成员变量

@Builder//lombok
班级部{
私人长途电话;
私人;
}
MainClass.java

Department.builder()
.depId(1L)
.person(我将从我需要的操作中获得的人员)
.build()

提前感谢。

如果可选项为空,您尚未指定要执行的操作。由于
@Builder.Default
位于
person
之上,因此我假设您希望在可选项为空时将其保留为
null

您可以首先提供
ifPresent
来设置角色。仅当值存在时才执行,否则不执行任何操作。 然后通过调用此对象上的
orElse
将该对象传递给构建器

optPersonFromDb.ifPresent(p->p.setRole(“Admin”);
建筑署()
.depId(1L)
.person(optPersonFromDb.orElse(空))
.build();

person.ifPresent(person1->person1.setRole(“Admin”)没有其他分配。我需要在另一个部门对象中设置此
人员
。如果我使用
ifPresent
它将返回我
void
,这不是我的理想方案。请检查问题的编辑。可选择重复问题。Map只执行“if present”并返回一个可选值。如果您希望返回person对象,那么还可以添加“.orElse”或类似的内容以引发异常或提供默认值。我相信如果你仔细检查一下,你会发现这是经过仔细解释的。你改变了问题。执行
setRole(“Admin”)
后要做的事情与您之前的要求无关。您的
map
方法没有比
ifPresent
更好地服务于您的新任务。在编辑之前,您没有说过要将某些内容传递给构建器。您发布的尝试,
var p=person.map(person1->person1.setRole(“Admin”)仍然与该生成器尝试没有连接。没有理由把这两件事混为一谈。当可选项不为空时,您希望调用
setRole(“Admin”)
person.ifPresent(person1->person1.setRole(“Admin”)将完成此操作。然后,您希望将该人员传递给构建器,这没有问题,但是您必须决定在可选项为空时执行什么操作。例如,正如K.Nicholas所说,
orElse
是一种退路