当前位置: 首页 > 知识库问答 >
问题:

查找和firstOrNull之间的区别是什么?

董翰池
2023-03-14

给定以下从静态编程语言Koans中提取的代码

fun Shop.findAnyCustomerFrom(city: City): Customer? {
    // Return a customer who lives in the given city, or null if there is none
    return customers.firstOrNull { it.isFrom(city) }
}

我自己的解决方案使用了客户。查找。两者都适用于koan场景。

firstOrNullfind的文档似乎非常相似。

这两个功能有什么区别?

共有1个答案

支阳波
2023-03-14

在2014年的这篇文章中,Kotlin社区成员和JetBrains员工讨论了不同方法的优点findfirstOrNull

https://youtrack.jetbrains.com/issue/KT-5185

JetBrains的雇员伊利亚·雷振科夫(Ilya Ryzenkov)虽然不是官方声明,但将其描述为:

我认为我们可以不建议使用查找,并将其作为firstOrNull的别名。就像indexOf有众所周知的语义学一样,fint也被广泛认为是"找到第一个匹配谓词的项目,如果没有找到,则返回null"。喜欢精确含义的人可以使用firstOrNullunileOrNull来表达意图。

换言之:

  • find(谓词)firstOrNull(谓词)在行为上是相同的,find可以被视为firstOrNull的别名

实际上Array的定义

@kotlin.internal.InlineOnly
public inline fun <T> Array<out T>.find(predicate: (T) -> Boolean): T? {
    return firstOrNull(predicate)
}

序列同上

@kotlin.internal.InlineOnly
public inline fun <T> Sequence<T>.find(predicate: (T) -> Boolean): T? {
    return firstOrNull(predicate)
}

(我自己不是Kotlin用户,但我很惊讶这些方法是作为编译时生成的代码实现的,手动为每个集合类型定义,而不是作为单个JVM通用方法实现的,这有什么原因吗?)

 类似资料:
  • 在Java 7之前,JVM内存中有一个名为PermGen的区域,JVM以前在这里保存它的类。在Java 8中,它被移除并被称为元空间的区域所取代。 PermGen和Metaspace之间最重要的区别是什么? 我知道的唯一区别是,并且忽略了VM参数。

  • 和之间有什么区别? 是什么原因导致他们被扔?如何解决这些问题? 在修改现有代码以包含新的jar文件时,我经常会遇到这些可抛物。我在通过WebStart发布的一个Java应用程序的客户端和服务器端都碰到了它们。 我遇到的可能原因是: 代码客户端的中未包含的包 我们正在使用的新JAR缺少运行时类路径 版本与以前的JAR冲突 当我今天遇到这些问题时,我会采取跟踪和错误的方法来使事情正常工作。我需要更多的

  • 当我试图在Spring4.x上进行测试时,我使用了MockMvc web客户端,但我正在阅读和尝试Spring5.x的新特性。 我认为,WebTestClient和MockMvc是相同或非常相似的。 MockMvc和WebTestClient之间的区别是什么?

  • 有人能给我解释一下map和flatMap之间的区别,以及什么是各自的好用例吗? “结果扁平化”是什么意思?它有什么好处?

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 本文向大家介绍Windows和Linux之间的根本区别是什么?,包括了Windows和Linux之间的根本区别是什么?的使用技巧和注意事项,需要的朋友参考一下 视窗 窗口操作系统是磁盘操作系统的扩展。 Windows是最流行,最简单的操作系统,任何可以阅读和理解基本英语的人都可以使用Windows,因为它不需要任何特殊培训。 它要求DOS最初运行各种应用程序。因此,应该将DOS安装到内存中,然后才