在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中编写相同的扩展名(顺序类型并不重要,列表/集合还可以),但是我还不够深刻。有什么提示吗?谢谢。
答案 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
}
}