我经常会遇到类似以下的数据源(下面的伪代码,没有任何特定的语法,只是为了说明):
list = {
"XLabel",
"XDescription",
"YLabel",
"YDescription",
"ZLabel",
"ZDescription"
}
所需的输出是:
list = {
MyClass("XLabel", "XDescription"),
MyClass("YLabel", "YDescription"),
MyClass("ZLabel", "ZDescription")
}
还有什么比做
fold()
更干净的了,然后将其折叠到一个新列表中?我也拒绝做奇怪的事情,例如list.partition().zip()
我基本上想要一个功能更强大的
map
,它像mapChunks( it1, it2 -> MyClass(it1, it2))
一样工作,其中分块是函数的一部分,因此它变得简单易用。 (我的示例中的列表以两个为大块,但3也是一个流行的用例。)这个功能存在吗?或最惯用的方法是什么?
最佳答案
您可以使用chunked
函数,然后在结果上使用map
。如果您分解lambda参数,语法将非常接近您想要的语法:
list.chunked(2)
.map { (it1, it2) -> MyClass(it1, it2) }
// Or use _it_ directly: .map { MyClass(it[0], it[1]) }