我正在处理“交替”行中的输入数据。
为了更好地处理此问题,我(和SO)提出了以下代码:
val foobars = mutableListOf<FooBar>()
lines.chunked(2) { (l1, l2) ->
foobars.add( FooBar( generateFoo(l1), generateBar(l2) )
}
上面的方法有效,但是首先创建一个空列表,然后追加到列表中以“收集”新创建的对象似乎有些奇怪。
如果这将是Java流,则使用List收集器将使“收集”部分更为简单。
现在,我想知道是否有更优雅/规范的方式来收集Kotlin中的 list 项目?
最佳答案
实际上比您想的要简单,例如
val foobars = lines.chunked(2) { (l1, l2) ->
FooBar( generateFoo(l1), generateBar(l2) )
}.toMutableList()
与Java流的不同之处在于,您实际上可以直接在列表(/序列/可迭代)上进行操作,并且每次调用
chunked
,filter
,map
,toList
,toMutableList
等时,都会得到一个新的列表。调用chunked
(+转换)后,您将获得一个包含转换的新列表。然后,只需调用toMutableList()
,就可以将其转换为(新的)可变列表。而且,如果您以后不需要更改列表,则可以跳过
toMutableList()
而已拥有列表。
关于collections - 如何从 “chunked” block 构建列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52038382/