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

Îsh*_*Îsh 3 kotlin

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

\n

感谢这里的提问

\n

Kotlin 中的 Java 风格代码使用Streams效果如下所示

\n
fun <T> allEqual(vararg entries: T): Boolean {\n\n    val reference = entries[0]\n    return Arrays.stream(entries)\n        .allMatch { entry: T -> reference == entry }\n}\nfun main(args: Array<String>) {\n    println(allEqual("EUR", "USD", "USD", "EUR")) //returns false\n    println(allEqual("USD", "USD", "USD", "USD")) //returns true\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Kotlin一直试图在使用中实现相同的目标sequences,而且我想保持这个辅助函数的通用性。

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

我看到以下错误Type mismatch. Required: (Array<out T>) \xe2\x86\x92 Boolean Found: (Array<out T>) \xe2\x86\x92 (Array<out T>) \xe2\x86\x92 Boolean

\n

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

\n

IR4*_*R42 9

fun <T> allEqual(vararg entries: T): Boolean = entries.all { it == entries[0] }
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案,没有理由创建序列。另外,如果你想保留你的 println 语句,你可以像这样使用 apply :entries.apply { println(first()) }.all { it ==entries.first() }`。注意 `.first()` 与 `fizz[0]` 相同 (2认同)

归档时间:

查看次数:

4177 次

最近记录:

5 年,2 月 前