Kotlin中有没有比双重flatMapping更简洁可读的嵌套列表过滤方法?
优化实现方案
你可以直接在单次flatMap中完成两层嵌套列表的拉平,合并后代码如下:
val myListOfStrings = mainList .filter { it.insertAfter == true } .flatMap { it.appliedTo.orEmpty().flatMap { innerList -> innerList.orEmpty() } } .distinct()
逻辑说明
- 原写法的两次
flatMap本质是先把所有appliedTo的二层嵌套列表展开,再把每个二层列表展开为字符串 - 优化后的写法在处理每个外层元素时,直接完成该元素对应两层嵌套列表的拉平,再交给外层
flatMap做全局展开,和原有逻辑完全等价,没有性能损耗,操作符数量从4个减少到3个。
如果你能确认二层列表元素(即appliedTo的子元素)非空,还可以用更简洁的flatten写法:
val myListOfStrings = mainList .filter { it.insertAfter == true } .flatMap { it.appliedTo.orEmpty().flatten() } .distinct()
内容的提问来源于stack exchange,提问作者Jake Lee
相关产品推荐
相关产品推荐

