Kotlin中如何合并多个可空集合?是否有现成函数?
合并多个可空集合的简洁解法
你完全不用写繁琐的if/else判断,Kotlin有好几种简洁的方式实现这个需求:
方法1:过滤空值后扁平化
把所有可空集合放进一个列表,过滤掉null后直接扁平化合并:
fun combineStuff(list1: List<String>?, list2: List<String>?, list3: List<String>?): List<String> { return listOf(list1, list2, list3) .filterNotNull() .flatten() }
listOf(list1, list2, list3):将三个可空集合包装成一个List<List<String>?>filterNotNull():移除所有null元素,得到List<List<String>>flatten():把嵌套列表展开成单个列表,完成合并
方法2:Elvis操作符结合plus
利用Kotlin的Elvis操作符?:,把null替换为空集合,再直接用+合并:
fun combineStuff(list1: List<String>?, list2: List<String>?, list3: List<String>?): List<String> { return (list1 ?: emptyList()) + (list2 ?: emptyList()) + (list3 ?: emptyList()) }
这种写法和你示例里的思路最接近,只是给每个可空集合加了兜底的空集合,避免直接加null抛出异常。
方法3:用buildList构建
如果需要更灵活的添加逻辑(比如后续要加更多集合),用buildList可读性更好:
fun combineStuff(list1: List<String>?, list2: List<String>?, list3: List<String>?): List<String> { return buildList { list1?.let { addAll(it) } list2?.let { addAll(it) } list3?.let { addAll(it) } } }
buildList会创建一个可变列表,我们只需要在里面判断每个集合非空时就添加所有元素,最后返回不可变的列表。
这几种方法都比手动写if/else简洁得多,而且不容易出错,完全满足你的需求。
内容的提问来源于stack exchange,提问作者pbuchheit
相关产品推荐
相关产品推荐

