Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Kotlin中的函数类型与';或';_Kotlin_Lambda - Fatal编程技术网

将Kotlin中的函数类型与';或';

将Kotlin中的函数类型与';或';,kotlin,lambda,Kotlin,Lambda,我是Kotlin的新手,不知道是否可以将一个函数列表合并到一个函数中 我有一个界面,显示一个过滤器和一些预定义的过滤器: interface Filter : (Int) -> Boolean { val a: Int } class FilterA(override val a: Int) : Filter { override fun invoke(numberToFilter: Int): Boolean { .... } } class

我是Kotlin的新手,不知道是否可以将一个函数列表合并到一个函数中

我有一个界面,显示一个过滤器和一些预定义的过滤器:

interface Filter : (Int) -> Boolean {
    val a: Int
}

class FilterA(override val a: Int) : Filter {

    override fun invoke(numberToFilter: Int): Boolean {
        ....
    }
}

class FilterB(override val a: Int) : Filter {

    override fun invoke(numberToFilter: Int): Boolean {
        ....
    }
}
我现在有一个
过滤器
对象的列表,我想使用包含析取
将其组合,以便我可以将Int列表传递给过滤器。例如:

val combinedFilter = listOf(FilterA(a), FilterB(b)). { `do something here` }

val filteredInt = listToBeFiltered.filter { combinedFilter }
然而,我不知何故被困在定义
在这里做些什么
部分。我相信你们可以用这个方法来做,但它总是告诉我一些错误。下面是我如何尝试的

val combinedFilter = listOfFilters.reduce { filterA, filterB -> { filterA or filterB } }

infix fun <T> ((T) -> Boolean).or(that: (T) -> Boolean): (T) -> Boolean = { this(it) || that(it) }

我相信我的语法有问题。希望你们能帮忙。谢谢。

这是因为您将表达式包装在一个额外的lambda中,
reduce
中的累加器类型将是
Filter
,但
返回
(T)->Boolean
。您可以通过指定累加器的类型并去掉额外的lambda来解决此问题:

val combinedFilter = listOfFilters.reduce<(Int) -> Boolean, Filter> { filterA, filterB -> filterA or filterB }

fun List Boolean>.combineAny()={x:T->this.any{filter->filter(x)}
val combinedFilter=listOfFilters.combineAny()
val filteredInt=ListToBefilted.filter(组合过滤器)
val combinedFilter = listOfFilters.reduce<(Int) -> Boolean, Filter> { filterA, filterB -> filterA or filterB }
val combinedFilter = { x: Int -> listOfFilters.any { filter -> filter(x) } }
val filteredInt = listToBeFiltered.filter(combinedFilter)
fun <T> List<(T) -> Boolean>.combineAny() = { x: T -> this.any { filter -> filter(x) } }
val combinedFilter = listOfFilters.combineAny()
val filteredInt = listToBeFiltered.filter(combinedFilter)