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