我正在向Kotlin移植一个使用linq某些功能的C#项目。举个例子,我们可以看一下linq查询:
from a in A
from b in B
from c in C
select fun(a,b,c);
在C#中,这允许链接任何类型的函数,然后以易于阅读的方式收集结果,这可能是非常需要的。 这相当于(或多或少):
A.SelectMany(a => B, (a, b) => new {a, b}).SelectMany(t => C, (t, c) => fun( t.a, t.b, c));
在Kotlin中实现Enumerable.SelectMany的功能并不是一个问题,但它仍然像C#等效一样嘈杂。
有什么方法可以在Kotlin中实现类似的东西,而不会使用嵌套元组进行详细说明,但更接近linq?
答案 0 :(得分:2)
@MarkTopolnik提供以下内容作为评论,但它实际上是一个有效的解决方案:
A.flatMap { a ->
B.flatMap { b ->
C.map { c ->
fun(a, b, c)
}
}
}