将Kotlin中的函数类型与';或';
我是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
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)