collections - 如何从“分块”块构建列表?
问题描述
我正在处理“交替”行中的输入数据。
为了很好地处理这个问题,我(和SO)想出了这个代码:
val foobars = mutableListOf<FooBar>()
lines.chunked(2) { (l1, l2) ->
foobars.add( FooBar( generateFoo(l1), generateBar(l2) )
}
上面的方法可行,但是首先创建那个空列表,然后附加到它以“收集”新创建的对象似乎有点奇怪。
如果这将是一个 Java 流,那么“收集”部分将是直截了当的,使用 List 收集器。
现在我想知道是否有更优雅/规范的方式在 kotlin 中收集我的列表项?
解决方案
它实际上比你想象的要简单,例如
val foobars = lines.chunked(2) { (l1, l2) ->
FooBar( generateFoo(l1), generateBar(l2) )
}.toMutableList()
与 Java 流的不同之处在于,您实际上可以直接对列表 (/sequence/iterable) 进行操作,并且每次调用类似chunked
, filter
, map
, toList
,toMutableList
等的东西时都会得到一个新的作为回报。所以在调用chunked
(+ 转换) 你得到一个包含转换的新列表。然后,您可以通过调用将其转换为(新的)可变列表toMutableList()
。
如果您以后不需要更改列表,您可以跳过toMutableList()
并且您已经有了您的列表。
推荐阅读
- java - Kafka SinkRecord 到 Avro 对象
- android - payfort sdk_token 生成上的签名不匹配错误
- java - 我必须编写一个程序来收集高度和序列号并输出 maxq min
- c# - 在其他计算机上恢复数据库需要创建一个主密钥
- java - 如何使用 jdbc 从数据库中加载对象列表
- python - 如何将用户输入与字典的键进行比较?
- python - 使用字典列表更新 SQL 表
- wordpress - Wordpress 联系表格 7 短代码不起作用
- javascript - javascripts 和下拉菜单在开发和生产模式下工作,但在部署到 Heroku 时都失败
- oracle - 如何在oracle中将所有约束和数据从一个模式复制到另一个模式