如何从“块”块构建列表?

时间:2018-08-27 11:32:43

标签: collections kotlin collectors

我正在处理“交替”行中的输入数据。

为了更好地处理此问题,我(和SO)提出了以下代码:

val foobars = mutableListOf<FooBar>()

lines.chunked(2) { (l1, l2) ->
    foobars.add( FooBar( generateFoo(l1), generateBar(l2) )
}

上面的方法有效,但是首先创建一个空列表,然后追加到列表中以“收集”新创建的对象似乎有些奇怪。

如果这将是Java流,则使用List收集器将“收集”部分直接进行。

现在我想知道在kotlin中是否有更优雅/规范的方式来收集我的清单项目?

1 个答案:

答案 0 :(得分:3)

实际上比您想的要简单,例如

val foobars = lines.chunked(2) { (l1, l2) ->
  FooBar( generateFoo(l1), generateBar(l2) )
}.toMutableList()

与Java流的不同之处在于,您实际上可以直接对列表(/序列/可迭代)进行操作,并且每次调用chunked,{{1} },filtermaptoList等。因此,在调用toMutableList(+转换)后,您将获得一个包含转换的新列表。然后,您只需调用chunked就可以将其转换为(新的)可变列表。

如果以后不需要更改列表,可以跳过toMutableList(),就已经有了列表。