
集合
|
97
5.5
当集合为空的时候返回默认值
问题
如何在处理集合时,如果过滤掉所有元素,但期望返回默认结果。
解决方案
当集合为空或字符串为空时,使用 ifEmpty 与 ifBlank 函数返回默认值。
讨论
假设你有一个名为 Product(产品)的数据类,它拥有 name、price 以及 onsale(标
识产品是否在售)三个属性,参见示例 5-14。
示例 5-14:Product 数据类
data class Product(val name: String,
var price: Double,
var onSale: Boolean = false)
如果你拥有一个产品 list,并且想要在售产品的名称,只需要做一个简单的过滤操作,
如下所示:
fun namesOfProductsOnSale(products: List<Product>) =
products.filter { it.onSale }
.map { it.name }
.joinToString(separator = ", ")
这个想法不会得到产品 list,使用布尔属性 onSale 过滤它们,然后将它们映射到
name,然后再将它们连接成一个字符串。问题是,如果没有产品在售,过滤将返回一个
空集合,然后将其转换为空字符串。
如果你希望在结果为空时返回特定的字符串,则可以在 Collection 与 String 上使
用 ifEmpty 函数。示例 5-15 展示了如何使用它。
示例 5-15:在 Collection ...