Ошибка компилятора Kotlin в IntelliJ - PullRequest
0 голосов
/ 06 июня 2018

Используя Kotlin 1.2.41-release и получив List<Pair<Int, Int>>, следующий код генерирует ошибку компиляции в Intellij, хотя сборка командной строки Gradle работает. sortedWith(compareBy({ it.first }, { it.second }))

Cannot choose among the following candidates without completing type inference.
public fun <T> compareBy(vararg selectors: (???) -> Comparable<*>?): kotlin.Comparator<???> defined in kotlin.comparisons
public fun <T> compareBy(vararg selectors: (Pair<Int, Int>) -> Comparable<*>?): kotlin.Comparator<Pair<Int, Int>> defined in kotlin.comparisons

Как мне это исправить?

Редактировать :

edges
  .map {
      it.either.run {
          val p = this
          val q = it.other(this)
          val min = min(p, q)
          if (min == p) p to q else q to p
      }
  }
  .sortedWith(compareBy({ it.first }, { it.second }))
  .toList()

, где edges равно Iterable<Edge>

class Edge(private val v: Int, private val w: Int, val weight: Double) : Comparable<Edge> {
    val either: Int
        get() = v

    fun other(vertex: Int): Int {
        return if (v == vertex) w else v
    }

    override fun compareTo(other: Edge): Int {
        return weight.compareTo(other.weight)
    }

    override fun toString(): String {
        return "Edge(v=$v, w=$w, weight=$weight)"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...