可选变量根据其值采取行动
Optional variable take action based on its value
我有一个方法接受可选参数和 returns 一个列表。我将根据 Optional 参数是否为空来填充列表。如果有的话,最accepted/standard的写法是什么
public List<ProjectDTO> getProjects(Optional<String> analystId) {
List<ProjectDTO> projects = new ArrayList<>();
analystId.ifPresentOrElse(
t -> projects.addAll(getProjectsByAnalyst(analystId)),
() -> projects.addAll(getAllProjects())
);
return projects;
}
此代码有效,但我想知道是否有更好的方法
就个人而言,在这种情况下我不会传递 Optional
作为参数。
在这种情况下,我会这样编码
var projects = Optional.of("the-analyst-id")
.map(id -> getProjectsByAnalist(id))
.orElseGet(()-> getAllProjects());
您可以选择将其包装在一个函数中(就像您之前所做的那样)。
方法 ifPresentOrElse()
没有 return 值 ,主要是用于 运行 副作用的运算符。
.map().orElseGet()
成语类似,但 return 的价值。
我有一个方法接受可选参数和 returns 一个列表。我将根据 Optional 参数是否为空来填充列表。如果有的话,最accepted/standard的写法是什么
public List<ProjectDTO> getProjects(Optional<String> analystId) { List<ProjectDTO> projects = new ArrayList<>(); analystId.ifPresentOrElse( t -> projects.addAll(getProjectsByAnalyst(analystId)), () -> projects.addAll(getAllProjects()) ); return projects; }
此代码有效,但我想知道是否有更好的方法
就个人而言,在这种情况下我不会传递 Optional
作为参数。
在这种情况下,我会这样编码
var projects = Optional.of("the-analyst-id")
.map(id -> getProjectsByAnalist(id))
.orElseGet(()-> getAllProjects());
您可以选择将其包装在一个函数中(就像您之前所做的那样)。
方法 ifPresentOrElse()
没有 return 值 ,主要是用于 运行 副作用的运算符。
.map().orElseGet()
成语类似,但 return 的价值。