可选变量根据其值采取行动

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 的价值