Kotlin如何用函数式方法合并同status的Alert对象并按指定格式输出
告警合并格式调整解决方案
你需要先将告警列表按status字段分组,再对同分组下的recordId批量拼接即可实现预期效果,调整后的代码如下:
val alert = if (orderedStatuses.isEmpty()) { "No alerts found for status" } else { "Alerts:\n" + orderedStatuses .groupBy { it.status } .entries .joinToString("\n") { (status, alerts) -> val recordIdsStr = alerts.joinToString( prefix = "('", postfix = "')", separator = ", " ) { it.recordId } "\t${status.lowercase()} : \n\t$recordIdsStr" } }
逻辑说明
- 用Kotlin原生的
groupBy函数实现按status分组,得到key为status、value为对应告警列表的Map结构,属于纯函数式实现 - 对每个分组的告警列表,用
joinToString的prefix、postfix参数直接生成括号包裹的id拼接格式,不需要额外做字符串拼接处理 - 如果不需要将
status转为小写,删除.lowercase()即可匹配原始大小写格式 - 可以通过调整
\t的数量适配你需要的缩进效果
内容的提问来源于stack exchange,提问作者AnthonyEdwardsStan
相关产品推荐
相关产品推荐

