我经常会遇到类似以下的数据源(下面的伪代码,没有任何特定的语法,只是为了说明):

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]) }

10-07 13:00
查看更多