Tag: 高阶函数

如何避免返回SAM接口的函数的对象表达式

我是一个kotlin新手所以也许这是微不足道的,但我没有找到任何相关的帮助,在kotlinlang.org。 为了学习一点kotlin我喜欢实现PushStream库。 我想要定义这样的基本类型: typealias Receiver<T> = (T) -> bool typealias PushStream<T> = (Receiver<T>) -> Unit AFAIK类型别名不支持,所以上面只是伪代码。 所以我的第一个尝试是这样的: interface Receiver<T> : (T) -> Boolean { } interface PushStream<T> : (Receiver<T>) -> Unit { } fun <T> singleton (v : T) : PushStream<T> { return { r : Receiver<T> -> r (v) } } 然后科特林说: Error:(10, 12) […]

如何在Kotlin中使用GROUP BY执行COUNT(*)?

假设我有一个下列类的对象列表。 class Contact( val name: String // … ) 我想检索一个映射名称到它的次数的映射Map<String, Int> 。 在一个基于SQL的数据库,我会查询: SELECT name, count(*) FROM Contact; 在Kotlin中使用更高阶函数的最好方法是什么?

如何调用与lambda多个相似签名Kotlin方法?

我正在使用这个库的一些代码: https : //github.com/Netflix-Skunkworks/rewrite 当我调用它的一个方法时,我遇到一个IDE错误: 所提供的参数都不能调用以下函数。 目标方法有两个相似的签名: data class CompilationUnit(…){ fun refactor() = Refactor(this) fun refactor(ops: Refactor.() -> Unit): Refactor { val r = refactor() ops(r) return r } fun refactor(ops: Consumer<Refactor>): Refactor { val r = refactor() ops.accept(r) return r } } Kotlin的调用代码: val unit: CompilationUnit =… unit.refactor{ tx -> doSomeThing() } 在Java中,这个lambda调用是可以的: CompilationUnit […]

记录Kotlin中函数参数的参数

比方说,我有一个更高阶的函数,它注册某种点击监听器。 我可以记录它的目的和传入的listener参数,如下所示: /** * Adds a [listener] that's called when the item is clicked. * * @param listener The listener to add */ fun addClickListener(listener: (count: Int) -> Unit) { … } 我的问题是,有没有办法来记录listener的参数? 这将在这个例子中count 。 在我的实际使用情况中,我的侦听器中有多个参数。 我注意到的是[listener]文本在我使用这个函数的文档视图中是可点击的,但它只是显示一个空的对话框。 有没有办法在那里描述参数呢? 现在,我已经在addClickListener方法中用@param块描述了监听器的@param ,但是这会在IDE中产生一个警告,我想知道是否有更合适的方法来实现它。

使用改造方法更具表现力的方式

我想使void enqueue(Callback<T> callback); 方法调用代码块更有表现力,下面是我通常的一个 request.enqueue(object : Callback<MyModel> { override fun onFailure(call: Call<MyModel>?, t: Throwable?) { // } override fun onResponse(call: Call<MyModel>?, response: Response<MyModel>?) { // } }) 而想要什么和意思是,要改变这个代码块更清洁的方式,并删除这些覆盖,对象,回调关键字,并做这样的事情: request.enqueue({throwable, response -> }) 我认为可以使用扩展和更高阶的函数来改进。 有谁知道它是如何做到的?

Kotlin:更高级的函数来计算列表中出现的数量?

我正在尝试使用Kotlin的高阶函数来计算列表中包含特定元素的次数。 我试过类似的东西 val result: Int? = list.count{ list.contains("element") } 但似乎是返回列表的大小,我不知道为什么。

如何在Kotlin中使用foldRight递归实现dropWhile

我一直在使用.foldRight()递归地实现高阶函数,就像实践一样,但是却一直难以实现。 _Collections.kt有迫切的方法,但我不能将其转换为递归结构。 作为参考,这是takeWhile fun takeWhile(list:List<Int>, func:(Int) -> Boolean):List<Int> = list.foldRight(emptyList(), { next:Int, acc:List<Int> -> if (func(next)) acc.plus(next) else emptyList() })

Java项目中Kotlin的高阶函数

我有一个函数类型作为形式参数: fun doSomething(code: () -> Boolean) = false //package function in TestKt.class 我试着在Java中调用它,传入一个lambda: //Java class, in Java project class Demo { public static void main(String[] args) { TestKt.doSomething(() -> false); } } 但是我得到的错误: 无法推断功能接口类型 它适用于Java类在Kotlin项目中,但不在Java项目中。 在我的Java项目中使用来自Kotlin的类时,我没有遇到任何其他问题,例如使用kotlin.Boolean类型的kotlin方法和使用vararg参数参数。 题 我如何正确调用Java项目的doSomething函数?

在Kotlin中使用功能类型的功能接口

从Kotlin调用Java代码时,有SAM转换,以便Java代码如下所示: adapter.setOnClickListener(new OnClickListener() { @Override public void onClick(View view, int position) { // Do stuff here } }); 可以看起来像这样: adapter.setOnClickListener { view, position -> // Do stuff } 现在,我正在做一个Kotlin项目,我想将一个函数接口定义为一个事件监听器: interface OnSomeActionListener { fun onSomeAction(parameter1: Int, parameter2: String) } 在SomeClass我有一个函数来设置监听器: … private var onSomeActionListener: OnSomeActionListener? = null fun setOnSomeActionListener(listener: OnSomeActionListener) { onSomeActionListener = listener } … […]

Kotlin反射是不可用的

我试图从这个视频的第一个例子学习更高级的功能。 这是我的代码和输出。 码 fun lowercase(value: String) = value.toLowerCase() fun higherOrder(value:String, op: (String) -> String) : String { println("Executing higher order fun $op") return op(value) } fun main(args: Array<String>) { println(higherOrder("HELLO", ::lowercase)) println(higherOrder("hello", {it -> lowercase(it)})) println(higherOrder("HeLlo", { x -> lowercase(x) })) println(higherOrder("Hello", { lowercase(it) })) } 产量 Executing higher order fun function lowercase (Kotlin reflection […]