首页 \ 问答 \ Kotlin - forEach(Kotlin - forEach)

Kotlin - forEach(Kotlin - forEach)

我是Kotlin的初学者。 你如何解释以下代码片段?

fun main(args: Array<String>) {

    var k = listOf<Double>(1.2,77.8,6.3,988.88,0.1)

        k.forEach(::println)
}

运行正常并给出列表,但有人可以帮助解释k.forEach(:: println)如何真正起作用?


I am beginner in Kotlin. How do you explain the following code snippet ?

fun main(args: Array<String>) {

    var k = listOf<Double>(1.2,77.8,6.3,988.88,0.1)

        k.forEach(::println)
}

This runs fine and gives the list but can someone please help with the explanation for how does k.forEach(::println) really work?


原文:https://stackoverflow.com/questions/47074091
更新时间:2020-02-17 11:05

最满意答案

forEach将每个元素放在k并执行您指定的操作。 在您的示例中,“ what ”参数是::println ,它引用stdlib函数println(message: Any)::引入了对此函数的函数引用 。 每个元素作为参数messageprintln ,因此它将被打印在控制台上。

为了更清楚,你可以传递一个lambda而不是像这样的函数引用:

k.forEach{
   println(it)
}

forEach takes each element in k and does what you specify it to do. In your example, the "what" argument is ::println, which refers to the stdlib function println(message: Any). The :: introduced a function reference to this function. Each element is passed as the argument message to println and thus it's being printed on the console.

To make it more clear, you could pass a lambda instead of the function reference like this:

k.forEach{
   println(it)
}
2018-01-29

相关问答

更多

Kotlin中集合的构建器语法(builder syntax for collections in Kotlin)

我建议避免在你的习惯用语中重复Label这个词: val labels = arrayOf("A", "B", "C", "D") .map { Label(it).apply { prefWidth = 50.0 } } .toTypedArray() 这会创建更多的瞬态对象,但它可以减少噪音,并且更容易看到标签之间的差异。 What I'd suggest is avoiding repeating the word Label in your idiom: ...

在Kotlin中过滤和处理hashmap条目(Filter and process hashmap entries in Kotlin)

为了避免存储中间值,可以使用Sequence ,它稍微等同于Iterable (有关详细信息,请参阅另一个问答 )。 要将Map的条目作为Sequence ,请使用.asSequence()转换(同样,不创建中间集合),然后在序列上使用.filter { ... }和.forEach { ... } : myMap.asSequence().filter { someCondition(it) }.forEach { doSomething(it) } 这将创建一个管道,它将逐个查询条目,检查它 ...

Kotlin多层它参考(Kotlin Multiple Layer it Reference)

不, it符号总是引用最内层的隐式单个lambda参数。 为了解决这个问题,并且为了提高代码的可读性,每次在嵌套带参数的lambda表达式时使用命名的lambda参数,如编码约定中所建议的那样: data.arrayresults.forEach { result -> result.myData.let { myData -> val itemView - inflater.inflate(R.layout.somelayout) itemVie ...

在Kotlin之前(before in Kotlin)

您可以使用Spark中的路径*来匹配所有路径,如下所示: before("*", { req, res -> logger.info("${req.requestMethod().toUpperCase()} ${req.fullUri()} by ${req.ip()} (${req.userAgent()})") }) // or: before("*") { req, res -> // ... You can use the path * in Spark to match ...

Kotlin中for循环的IndexOutOfBoundsException(IndexOutOfBoundsException for for-loop in Kotlin)

Kotlin中的范围是包容性的,因此0..foodObjects!!.size从0开始并以foodObjects.size结束,包括两端。 当您的循环尝试使用自己的大小索引列表时,这会导致异常,该大小比最大的有效索引多一个。 要创建不包含上限的范围(如Java循环),您可以使用until : for(i in 0 until foodObjects!!.size) { // ... } 如果您对预先使用的集合进行空检查,您还可以稍微清理一下代码: if (foodObjects != n ...

Kotlin方法引用代替lambda(Kotlin method references in place of lambda)

Kotlin问题跟踪器中有一个打开的功能请求 ,标题为“支持具有默认值的函数引用作为其他函数类型” ,这似乎是您的用例缺少的功能。 该功能目前的版本为1.3。 There's an open feature request in the Kotlin issue tracker with the title "Support function references with default values as other function types", which seems to be wha ...

使用Kotlin和Gradle(using Kotlin with Gradle)

这些类是Kotlin编译器的直接输出,之后应由Gradle打包到JAR中。 要构建JAR,您可以像在Java项目中一样运行jar任务: gradle jar 由于任务依赖性,此任务通常gradle build期间运行。 这将把Kotlin类打包成一个JAR存档(与其他JVM类一起,如果你有一个多语言项目),通常位于build/libs/ yourProjectName .jar 。 关于运行JAR,请参阅此问答以获取详细说明:( 链接) Thanks for @hotkey answer, it ...

Android正式支持哪个Kotlin版本?(Which Kotlin version is officially supported by Android?)

只要你,任何Kotlin都与Android兼容 compile "org.jetbrains.kotlin:kotlin-stdlib" // or compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7" 这个带有两个参数回调的forEach方法来自Java 8,它仅在API 24之后可用。这也是为什么在API 24以下你不能 compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8" 您正在寻找的是Kotli ...

Kotlin - forEach(Kotlin - forEach)

forEach将每个元素放在k并执行您指定的操作。 在您的示例中,“ what ”参数是::println ,它引用stdlib函数println(message: Any) 。 ::引入了对此函数的函数引用 。 每个元素作为参数message给println ,因此它将被打印在控制台上。 为了更清楚,你可以传递一个lambda而不是像这样的函数引用: k.forEach{ println(it) } forEach takes each element in k and does wha ...

为什么operation.map(启动线程).foreach(join())在kotlin中工作?(why does operation.map(launch thread).foreach(join()) work in kotlin?)

map调用在forEach之前终止,因此每次launch都将在第一次join之前调用(在forEach内部)。 这些收集操作不像Java的Streams那样工作。 阅读此答案以获取更多信息。 在Kotlin,它是这样的: launch协同程序1-100 join协程1-100 The map call terminates before forEach, thus every single launch will be called before the first join (inside fo ...

相关文章

更多

最新问答

更多
  • 如何保护Solr只允许SELECT请求给用户并禁止其他任何东西?(How to secure Solr to allow SELECT request to only users and disallow anything else?)
  • XPath表达式无效/错误TFHpple SWIFT 1.2(XPath Expression not working/incorrect TFHpple SWIFT 1.2)
  • css3 3D变换不能平滑地制作动画(css3 3D transform doesn't animate smoothly)
  • 运行时错误'91'和Outlook.Application = <对象变量或没有设置块变量>?(Run-time error '91' & Outlook.Application = Object variable or With block variable not set?)
  • 慢的webservice问题(Slow webservice problem)
  • textview的不正确对齐方式(Improper alignment of a textview)
  • 在第一步“Hello World”中出现Java错误(Cannot run “Hello World” program in Eclipse)
  • 为什么十六进制地址是14个字符?(why the hex address is 14 character?)
  • 如何在Python中的不同类中使用变量?(How to use variable in different classes in Python?)
  • asp:GridView HYPERLINKFIELD - datanavigateurlformatstring中的asp代码(asp:GridView HYPERLINKFIELD - asp code inside datanavigateurlformatstring)
  • 关于adaboost算法(About adaboost algorithm)
  • 在Matlab上内置图像(Built in Images on Matlab)
  • java swing:输入键事件时焦点丢失(java swing: Focus lost on enter key event)
  • C#中的通用约束,T是相同的TSomethingElse,对吧?(Generic constraints in C#, T is the same TSomethingElse, right?)
  • 从mybatis中的光标获取数据(Fetching data from cursor in mybatis)
  • 在运行时从XML构建对象的最佳方法(Best way for building objects out of XMLs at runtime)
  • 在整个窗口中拉伸sf :: Sprite(Stretch sf::Sprite across entire window)
  • Selenium Node API Web驱动程序等待超时处理程序(Selenium Node API web driver wait timeout handler)
  • 函数使用并且是map的一部分(循环依赖?)(Function uses and is part of map (circular dependency?))
  • 是否可以在C ++ 14中使用可选模板参数创建类型元组?(Is possible to make a tuple of types with optional template parameters in C++14?)
  • PHP从窗帘后面打印/ f(PHP prints /f from behind the curtains)
  • JFrame的contentPane的LayoutManager(LayoutManager of JFrame's contentPane)
  • 用于Instagram Feed的图像滚动(Image Roll Overs for Instagram Feed)
  • 如何显示拉伸字体(双倍宽度/高度)?(How to display stretched font (double width/height)?)
  • 文件操作API在fileapi.h和stdio.h中的WP8差异?(WP8 differences between file manipulation APIs in fileapi.h and stdio.h?)
  • 保存失败后Rails没有回滚事务()(Rails not rolling back transaction after failed save())
  • jqgrid中的分页问题与数组数据(Pagination problem in jqgrid with array data)
  • 重定向时,通过其他页面上的URL调用javascript函数(Call javascript function through url on otherpage while Redirecting)
  • 如何使用InvokeCommandAction调用我的方法并传入参数?(How do I go about using InvokeCommandAction to call a method of mine and pass in parameters?)
  • Jquerymobile按钮仅显示页面的第一个外观(Jquerymobile buttons are shown only first apperance of the page)