Kotlin 如何将MyClass的intValue映射到集合内每个SomeClass生成配对列表
直接可用的实现
完全匹配你需要的链式调用写法,运行后直接输出预期的列表结构:
val result = setOfMyClass.flatMap { myClass -> myClass.setValues.map { someClass -> someClass to myClass.intValue } } // 等价的简化写法 val result = setOfMyClass.flatMap { mc -> mc.setValues.map { it to mc.intValue } }
实现逻辑说明
- 遍历顺序和预期完全一致:标准库中
setOf返回的集合会保持元素的插入顺序,遍历的时候会按val1、val2、val3的原有顺序处理,不会打乱原有对应关系,最终输出的Pair顺序和你列的预期结果完全对齐。 - 对每个
MyClass实例,遍历其内部的setValues集合,把每个SomeClass元素和该实例携带的intValue组合成Pair。 - 选择
flatMap是核心原因:如果只用普通map,会生成嵌套的列表结构(每个MyClass对应一个包含3个Pair的子列表),flatMap会自动把所有子列表的元素拆出来拼接成一个平的一维列表,完全符合你要的列表类输出要求。 - 操作过程不会自动触发去重,天然支持同一个
SomeClass和多个不同intValue配对的场景(比如预期输出里someClass1分别对应1、2的情况),不需要额外调整配置。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

