【问题标题】:How return@map worksreturn@map 的工作原理
【发布时间】:2019-04-16 08:14:59
【问题描述】:

我刚刚开始使用 kotlin 学习 Java 流 API,并且我正在使用 Project Reactor 和 r2dbc API。我正在编写一个简单的代码,如下所示,如果理解它是如何工作的,我将不胜感激。

我想知道t.let{} 使用return@map 返回MovieCeleb 对象的行。我想知道这条线是做什么的,即它是否创建了一个列表/地图以及它是如何做到的。

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)
            }
}

【问题讨论】:

标签: kotlin


【解决方案1】:

给定

.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 将从map 函数返回celeb 参考值(而不是来自let!)。它只是某种所谓的non-local return,而您可以手动指定语句的返回范围。

【讨论】:

  • 我也想知道这个映射什么时候执行,即sql什么时候返回值?以及如何将单个对象添加到 Flux API 中?
  • 这个问题和 Flux API 有什么关系?这是完全不同的问题。
  • 映射将在bind方法执行后进行,并返回map方法将操作的值
  • .all() 返回对象的Flux。所以我问了个别对象。但没关系,我会进一步挖掘
猜你喜欢
  • 2021-10-31
  • 1970-01-01
  • 2019-01-24
  • 2021-03-20
  • 2011-10-26
  • 2017-12-02
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多