kotlin - return@map 的工作原理
问题描述
我刚刚开始使用 kotlin 学习 Java 流 API,并且我正在使用 Project Reactor 和 r2dbc API。我正在编写一个简单的代码,如下所示,如果理解它是如何工作的,我将不胜感激。
我想知道t.let{}
使用返回 MovieCeleb 对象的行return@map
。我想知道这条线是做什么的,即它是否创建了一个列表/地图以及它是如何做到的。
fun listAllMoviesBy(actor: String, client: DatabaseClient) {
client.execute()
.sql { "SELECT fin.id, full_name, movie_title, make_year, celeb_id, birth_date " +
"FROM featured_in fin JOIN film_celeb fc ON " +
" fin.celeb_id = fc.id WHERE fc.full_name = $1"
}.bind(0, actor).map { t, u ->
t.let {
val featuredIn = FeaturedIn(it.get("id") as Int, it.get("movie_title") as String, it.get("make_year") as Int)
val celeb = MovieCeleb(it.get("celeb_id") as Int, it.get("full_name") as String, it.get("birth_date") as LocalDate, featuredIn)
return@map celeb
}
}.all()
.subscribe{
println(it)
}
}
解决方案
给定
.map { t, u ->
t.let {
val featuredIn = FeaturedIn(it.get("id") as Int, it.get("movie_title") as String, it.get("make_year") as Int)
val celeb = MovieCeleb(it.get("celeb_id") as Int, it.get("full_name") as String, it.get("birth_date") as LocalDate, featuredIn)
return@map celeb
}
}
return@map celeb
将从函数返回celeb
参考值map
(而不是从let
!)。它只是某种所谓的非本地返回,而您可以手动指定语句的返回范围。
推荐阅读
- eclipse - eclipse如何配置从包管理器安装的tomcat?
- typescript - 如何在 TypeScript 中定义一种类型,该类型可以具有除特定属性之外的任何属性?
- php - 如何修复未在 PHP、HTML 中的 DataTables 上显示的数据
- kubectl - Bash Completion 在第二个参数中不起作用
- javascript - 动态创建的 SVG 被渲染成 HTML 但无法正确显示
- ios - Appium 无法在 iPhone 模拟器上启动 App
- java - 使用 Stream 从二维整数数组中查找奇数
- r - 将 NA 分配给具有多列的数据框中超出范围的值时,错误找不到函数“%>%<-”
- swift - 计算字符串中的总数字字符
- watson-conversation - 我在使用 sys-person 实体时遇到问题。它无法识别像 Hema 、 Kishan 这样的非英语名称