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

Collections 如何从“分块”块构建列表?,collections,kotlin,collectors,Collections,Kotlin,Collectors,我正在处理交替输入的数据 为了更好地处理这个问题,我提出了以下代码: val foobars = mutableListOf<FooBar>() lines.chunked(2) { (l1, l2) -> foobars.add( FooBar( generateFoo(l1), generateBar(l2) ) } 上面的方法是有效的,但首先创建空列表,然后附加到它以收集新创建的对象似乎有点奇怪 如果这是一个Java流,那么收集部分将是直接的,使用列表收集器

我正在处理交替输入的数据

为了更好地处理这个问题,我提出了以下代码:

val foobars = mutableListOf<FooBar>()

lines.chunked(2) { (l1, l2) ->
    foobars.add( FooBar( generateFoo(l1), generateBar(l2) )
}
上面的方法是有效的,但首先创建空列表,然后附加到它以收集新创建的对象似乎有点奇怪

如果这是一个Java流,那么收集部分将是直接的,使用列表收集器


现在我想知道在kotlin中是否有更优雅/规范的方法来收集我的列表项?

它实际上比你想象的更简单,例如

val foobars = lines.chunked(2) { (l1, l2) ->
  FooBar( generateFoo(l1), generateBar(l2) )
}.toMutableList()
与Java流的不同之处在于,您实际上可以直接对列表/序列/iterable进行操作,每次调用chunked、filter、map、toList、toMutableList等内容时,您都会得到一个新的列表,其中包含转换。然后,只需调用toMutableList,就可以将其转换为新的可变列表


如果您以后不需要更改列表,您可以跳过TutableList,您已经有了您的列表。

它实际上比您想象的更简单,例如

val foobars = lines.chunked(2) { (l1, l2) ->
  FooBar( generateFoo(l1), generateBar(l2) )
}.toMutableList()
与Java流的不同之处在于,您实际上可以直接对列表/序列/iterable进行操作,每次调用chunked、filter、map、toList、toMutableList等内容时,您都会得到一个新的列表,其中包含转换。然后,只需调用toMutableList,就可以将其转换为新的可变列表


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

我使用toMutableList来允许添加条目。最后,您的示例与toList配合得很好!没错。。。我只是用了可变列表,因为你。。。我不认为你以后不需要修改它-@GhostCat if line是一个你甚至不需要调用的Iterable。toList,因为chunked已经返回了一个列表。谢谢@Ilya的评论。你说得对,末尾的另一个toList是多余的。我使用toMutableList来允许添加条目。最后,您的示例与toList配合得很好!没错。。。我只是用了可变列表,因为你。。。我不认为你以后不需要修改它-@GhostCat if line是一个你甚至不需要调用的Iterable。toList,因为chunked已经返回了一个列表。谢谢@Ilya的评论。你说得对,最后的另一个收费表是多余的。