collections - 如何从 “chunked” block 构建列表?

标签 collections kotlin collectors

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

为了更好地处理此问题,我(和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流的不同之处在于,您实际上可以直接在列表(/序列/可迭代)上进行操作,并且每次调用chunkedfiltermaptoListtoMutableList等时,都会得到一个新的列表。调用chunked(+转换)后,您将获得一个包含转换的新列表。然后,只需调用toMutableList(),就可以将其转换为(新的)可变列表。

而且,如果您以后不需要更改列表,则可以跳过toMutableList()而已拥有列表。

关于collections - 如何从 “chunked” block 构建列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52038382/

相关文章:

Java 集合和内存使用

kotlin - 如何使用Apache Beam在Kotlin中扩展DoFn?

android - 相机X : Capturing photo as bitmap

java - 处理从 Kafka 检索到的每条记录后,正确的提交方式是什么?

Java 8 : Collector groupby with list nested class

c# - 在 C# 中的 foreach 循环中返回一次迭代

Java:如何对对象列表进行排序?

java - 合并 Java 流

java - Java中int类型的ArrayList的ArrayList?

使用自定义收集器的 Java 8 分组?