首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >遍历过滤器列表以应用它们

遍历过滤器列表以应用它们
EN

Stack Overflow用户
提问于 2019-07-27 17:17:39
回答 2查看 65关注 0票数 0

我在列表(10..1000)上有一些过滤器。我想要一个函数对象列表,遍历这个列表,并将该过滤器应用于(10..1000)。也许以后会选择一些过滤器。

代码语言:javascript
运行
复制
fun main(args: Array<String>) {
    var sol = (10..1000).toList().filter(lastDigitIsLength ).filter(no7andNo1 ).filter(isEvenAndGreater1).filter(first2DigitsOddCrossSumLess10 ).filter(isPrime )
println("The number is $sol")

}
/* The functions exist
EN

回答 2

Stack Overflow用户

发布于 2019-07-27 17:49:01

有几种方法可以做到这一点。

我已经在我的示例中列出了它们,以及一些一般性的注释。

代码语言:javascript
运行
复制
// No need for varargs since Kotlin 1.3
fun main() {
    // Prefer vals over vars
    val sol = (10..1000).
            asSequence().// Use asSequence instead of toList
            filter { lastDigitIsLength(it) }. // Block
            filter(::no7andNo1). // Method reference
            toList()
    println("The number is $sol")

}

// Don't know what it means, so lets just always return true
fun lastDigitIsLength(i: Int) = true // Short notation

fun no7andNo1(i: Int): Boolean {
    return i % 10 == 7 || i % 10 == 1
}
票数 1
EN

Stack Overflow用户

发布于 2019-07-27 17:53:27

对不起,也许我误解了你的问题。是否要将筛选器列表应用于整型列表?如果是这样的话,可以这样做:

代码语言:javascript
运行
复制
fun filter(list: List<Int>, filters: List<(Int) -> Boolean>): List<Int> {
    var result = list
    for (filter in filters) {
        result = result.filter(filter)
    }

    return result
}

因此您可以将您的函数重写为:

代码语言:javascript
运行
复制
fun main() {
    val sol = filter((10..1000).toList(), listOf(::lastDigitIsLength, ::no7andNo1, ::isEvenAndGreater1))
    println("The number is $sol")
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57230770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档