Kotlin:如何检查序列中的所有值是否具有相同的值

问题描述 投票:0回答:2

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

感谢问题这里

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
}

一直在尝试使用

Kotlin
sequences
中实现相同的目标,而且我也想保持这个辅助函数的通用性。

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<out T>) → Boolean Found: (Array<out T>) → (Array<out T>) → Boolean

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

kotlin
2个回答
9
投票
fun <T> allEqual(vararg entries: T): Boolean = entries.all { it == entries[0] }

0
投票

我觉得这个代码也不错。

list.distinct().size == 1

我可以像下面一样使用这个代码。

val testList = listOf(1,1,1)

if (testList.distinct().size == 1) {
  println("They are all the same!")
}
© www.soinside.com 2019 - 2024. All rights reserved.