有没有办法使用方法“可选”的“orElseGet”创建一个新的列表时,它是空的方法吗?

罗宾孙:

假设我们有结构如下一类:

class Resource{
   String id; 
   String name;
   List<String> friends;
}

有没有办法让这样使用“可选”列表:

Optional.of(resource.getFriends()).map(friends -> {
    friends.add("John");
    return friends;
}).orElseGet(
    //do something here.
)

如果是以前没有一个新的列表的预期。

奥莱VV:

这取决于你更精确的功能要求。我提出了几个方案。

如果你只是想要一个包含资源和约翰的朋友列表:

    List<String> listWithJohn = Optional.ofNullable(resource.getFriends())
            .orElseGet(ArrayList::new);
    listWithJohn.add("John");

罗勒布尔克在评论中提到,因为Java的9名单初始化可以代替使用来完成Objects.requireNonNullElseGet

    List<String> listWithJohn
            = Objects.requireNonNullElseGet(resource.getFriends(), ArrayList::new);

相反,如果你想约翰添加到资源的朋友,我建议getFriends的方法是在哪里编辑:

/** @return The list of friends, not null */
public List<String> getFriends() {
    if (friends == null) {
        friends = new ArrayList<>();
    }
    return friends;
}

返回列表本身使得资源易受呼叫者修改他们的朋友名单不期望的和不可预知在以后的任何时候,虽然。通常,一个希望返回列表中的副本或它的一个不可改变的视图,而不是(阻止主叫方加入约翰的朋友)。在这种情况下,资源可以有一个addFriend添加好友的方法。

编辑:

有没有办法只有一个拉姆达行代码做什么呢?

    friends = friends == null ? new ArrayList<>() : friends;
    return friends;

但我发现它的可读性(而且也没有拉姆达那里,它只是一个班轮)。或者,如果你想让它完全隐蔽:

    return friends = friends == null ? new ArrayList<>() : friends;

不建议。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法有一个嵌套的 for 循环而不必在本地创建一个新变量?

有没有办法从另一个方法调用类方法?

有没有办法用配置包装和 select_range 方法创建一个小部件?

有没有办法使用#define 指令来创建一个常量结构?

有没有办法可以从一个方法返回多个整数?

有没有办法听另一个类的方法执行?

有没有办法只声明一个指向特定方法的指针?

有没有办法制作一个可以被String调用的方法?

有没有办法找出一个方法是静态的还是非静态的?

有没有办法从熊猫中的现有列值中创建一个值列表?

有没有办法创建一个空数组并在它在 vb.net 中获取数据时增长它?

有没有办法创建一个包含子目录和文档的新目录?

有没有办法在for循环中更改全局函数,而不是创建一个新函数?

有没有办法创建一个新的 HTMLDocument 实例并在其中运行 JavaScript?

有没有办法找出一个方法是否被同一个对象递归调用?

有没有办法知道一个方法是否是一个运算符?

有没有办法创建一个列表,其中包含由用户在 python 中输入添加的元素?

有没有办法根据列表的元素取消列出元素,然后创建一个数据框?

有没有办法在另一个方法中使用一个方法的返回值?

有没有办法创建一个元素,当不同的元素悬停在并跟随光标时出现?

有没有办法初始化一个空切片?

有没有办法知道一个方法是否正在从方法内部等待?

有没有办法放大“ setSelected”列表中的下一个节点?

有没有办法在python中“堆叠”一个列表?

有没有办法在同一个列表上进行多次插入?

有没有办法用另一个替换列表中的索引?

有没有办法获取一个类的所有成员类并循环它们以执行方法?

有没有办法用代码创建一个segue

有没有办法创建一个用户名为“admin”的用户?