加入可扩展项的扩展功能(Kotlin)

时间:2018-07-25 17:38:41

标签: kotlin

在Scala中,我定义了一个扩展函数,以便可以连接两个Sequence,就像在SQL中一样

%ERRORLEVEL%

用法示例:

implicit def SeqExtensions[X](first: Seq[X]) = new {
 def join[Y](second: Y) = new {
   def on(predicate: (X, Y) => Boolean) = {
     for (ff <- first; if predicate(ff, second)) yield (ff, second)
   }
 }
}

=>结果类型为Seq [(UnitComponent,UnitComponent)]

我现在想在Kotlin中编写相同的扩展名(顺序类型并不重要,列表/集合还可以),但是我还不够深刻。有什么提示吗?谢谢。

1 个答案:

答案 0 :(得分:1)

这与Scala代码相同:

class IterableJoin<X, Y>(val first: Iterable<X>, val second: Y) {
    infix fun on(predicate: (X, Y) -> Boolean) =
        first.filter { predicate(it, second) }.map { it to second }
}

infix fun <X, Y> Iterable<X>.join(second: Y) = IterableJoin(this, second)

调用将如下所示:

val joinSeq = unitComponents.flatMap { w ->
    myOtherUnitComponents join w on { u, w ->
        w.cell == u.cell
    }
}