首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vavr集合中的peekOption和headOption有什么区别?

Vavr集合中的peekOption和headOption有什么区别?
EN

Stack Overflow用户
提问于 2022-04-01 12:40:47
回答 2查看 168关注 0票数 1

这里是Vavr List peekOption的文档

https://www.javadoc.io/doc/io.vavr/vavr/0.10.1/io/vavr/collection/List.html#peekOption--

这里是Vavr可遍历headOption的文档

https://www.javadoc.io/doc/io.vavr/vavr/0.10.1/io/vavr/collection/Traversable.html#headOption--

注射似乎完全一样,所以对于这种用法,我可以使用两者,但哪一个是最好的…?

代码语言:javascript
复制
MyObject myObject = myJavaCollection.stream()
.filter(SomePredicate::isTrue)
.collect(io.vavr.collection.List.collector()) //Collect to vavr list to have vavr methods availables
.peek(unused -> LOGGER.info("some log"))
.map(MyObject::new)
.peekOption() //or .headOption()
.getOrNull();

所以我想知道这些方法有什么区别。

EN

回答 2

Stack Overflow用户

发布于 2022-04-01 14:00:58

在Vavr的List (参见https://github.com/vavr-io/vavr/blob/master/src/main/java/io/vavr/collection/List.java)的源代码中,我们有:

代码语言:javascript
复制
/**
 * Returns the head element without modifying the List.
 *
 * @return {@code None} if this List is empty, otherwise a {@code Some} containing the head element
 * @deprecated use headOption() instead
 */
@Deprecated
public final Option<T> peekOption() {
    return headOption();
}

因此,就像您说的,它们所做的完全一样,而且由于不推荐使用peekOption(),所以使用headOption()似乎是应该使用的。

至于使用一种而另一种的理由:

看起来,Vavr List接口定义了一些与堆栈相关的方法(如push、pop、peek等),以便更方便地将列表作为堆栈使用,如果您希望这样做的话。(例如,如果认为列表是堆栈,则使用peekOption(),否则使用headOption() )

然而,这些堆栈方法都是不推荐的--可能是因为总是可以使用非堆栈方法来代替它们。因此,他们可能放弃了“列表也是一个堆栈”的想法--也许是因为他们认为它混合了一些概念,使界面过于庞大(只是猜测)。因此,这一定是headOption()成为首选的原因--所有堆栈方法都不推荐使用。

(普通的Java列表也有堆栈方法,但这是通过接口实现的,所以所有的列表都是堆栈,但是您可以拥有一个不是列表的堆栈。)

票数 2
EN

Stack Overflow用户

发布于 2022-04-01 12:56:00

根据他们的文件(列表可穿)

列表的peekOption

默认选项peekOption() 返回head元素,而不修改列表。 返回:如果此列表为空,则为无,否则为包含head元素的

可遍历headOption

默认选项headOption() 返回非空可遍历选项的第一个元素。 返回:如果为空,则返回一些(元素)或无。

他们的行为完全一样。它们要么返回head元素,要么返回Option.none()。只有它们的变体head和peek在不存在元素的情况下抛出异常。List恰好有两个方法,它们的行为方式是相同的,因为它扩展了可遍历的接口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71707079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档