【问题标题】:Kotlin: How to check if all values in the sequence has same valueKotlin:如何检查序列中的所有值是否具有相同的值
【发布时间】:2020-12-07 19:44:12
【问题描述】:

我正在尝试在 Kotlin 中编写一个辅助方法,该方法将检查序列中的所有值是否具有相同的值。

感谢提问here

在 Kotlin 中使用 Streams 的 Java 样式代码如下所示

fun <T> allEqual(vararg entries: T): Boolean {

    val reference = entries[0]
    return Arrays.stream(entries)
        .allMatch { entry: T -> reference == entry }
}
fun main(args: Array<String>) {
    println(allEqual("EUR", "USD", "USD", "EUR")) //returns false
    println(allEqual("USD", "USD", "USD", "USD")) //returns true
}

一直在尝试使用sequencesKotlin 中实现相同的功能,并且我想保持这个辅助函数通用。

fun <T> isAllEqual(vararg entries: T) : Boolean {
    val reference = entries[0]
    println(reference)
    val isEqual: (Array<out T>) -> Boolean = { it == reference }
   val seq = listOf(entries).asSequence()
    return seq.all{isEqual}
}
fun main(args: Array<String>) {
    println(isAllEqual("USD", "USD", "USD", "USD"))
}

我看到以下错误Type mismatch. Required: (Array&lt;out T&gt;) → Boolean Found: (Array&lt;out T&gt;) → (Array&lt;out T&gt;) → Boolean

任何见解将不胜感激。谢谢。

【问题讨论】:

    标签: kotlin


    【解决方案1】:
    fun <T> allEqual(vararg entries: T): Boolean = entries.all { it == entries[0] }
    

    【讨论】:

    • 这是正确答案,没有理由创建序列。此外,如果您想保留您的 println 声明,您可以像这样使用 applyentries.apply { println(first()) }.all { it == entries.first() }。注意.first()fizz[0] 相同
    猜你喜欢
    • 2021-09-11
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    相关资源
    最近更新 更多