根据 Int 数组过滤数组
Filtering an array based on an array of Int
我有一个 Drink
对象,它有一个名为 strength
的 属性。强度是一个整数,值为 0、1、2 或 3。
现在在我的项目中,我在列表视图中显示所有 Drink
对象。在列表视图的顶部,有一个过滤部分,供用户根据强度过滤 Drink
个对象。这些是复选框,这意味着用户可以 select 少至 1 个过滤器,或多至 4 个。这将作为 Int 数组保存到 SharedPreferences。
data class Drink(val theDrinkName:String, val strength:Int)
object DrinkData {
const val low = 0
const val medium = 1
const val strong = 2
const val intense = 3
fun generateAllDrinks():Array<Drink> {
return arrayOf(
Drink("Vodka", medium),
Drink("Shirley Temple", low),
Drink("rum", strong),
Drink("Gin", medium),
Drink("151", intense),
Drink("99", strong)
)
}
}
以下是我生成所有数据的方式:
val allDrinks = DrinkData.generateAllDrinks().sortedWith(
compareBy<Drink> { it.theDrinkName.first().isDigit() }
.thenBy { it.theDrinkName.toLowerCase() }
)
我需要能够根据 Int 数组过滤此数据的强度 属性。(Int 数组是保存到 SharedPreferences 的内容。)
val filteredStrengthArray = arrayListOf<Int>(2,3)
这会过滤 allDrinks
朗姆酒、151、99。
我的进度:
这是我实现此过滤的壁橱。
val allDrinks = DrinkData.generateAllDrinks().sortedWith(
compareBy<Drink> { it.theDrinkName.first().isDigit() }
.thenBy { it.theDrinkName.toLowerCase() }
).filter { it.strength == 2 || it.strength == 3 }
问题是我需要按 Int 数组进行过滤以对齐保存在 SharedPreferences 中的内容。
如何通过提供 Int 数组来过滤此数据的强度 属性?
想到的第一个解决方案是检查 strength
属性 是否包含在 filteredStrengthArray
中:
val filteredStrengthArray = arrayListOf<Int>(2,3)
val allDrinks = DrinkData.generateAllDrinks().sortedWith(
...
).filter { filteredStrengthArray.isEmpty() || filteredStrengthArray.contains(it.strength) }
我有一个 Drink
对象,它有一个名为 strength
的 属性。强度是一个整数,值为 0、1、2 或 3。
现在在我的项目中,我在列表视图中显示所有 Drink
对象。在列表视图的顶部,有一个过滤部分,供用户根据强度过滤 Drink
个对象。这些是复选框,这意味着用户可以 select 少至 1 个过滤器,或多至 4 个。这将作为 Int 数组保存到 SharedPreferences。
data class Drink(val theDrinkName:String, val strength:Int)
object DrinkData {
const val low = 0
const val medium = 1
const val strong = 2
const val intense = 3
fun generateAllDrinks():Array<Drink> {
return arrayOf(
Drink("Vodka", medium),
Drink("Shirley Temple", low),
Drink("rum", strong),
Drink("Gin", medium),
Drink("151", intense),
Drink("99", strong)
)
}
}
以下是我生成所有数据的方式:
val allDrinks = DrinkData.generateAllDrinks().sortedWith(
compareBy<Drink> { it.theDrinkName.first().isDigit() }
.thenBy { it.theDrinkName.toLowerCase() }
)
我需要能够根据 Int 数组过滤此数据的强度 属性。(Int 数组是保存到 SharedPreferences 的内容。)
val filteredStrengthArray = arrayListOf<Int>(2,3)
这会过滤 allDrinks
朗姆酒、151、99。
我的进度:
这是我实现此过滤的壁橱。
val allDrinks = DrinkData.generateAllDrinks().sortedWith(
compareBy<Drink> { it.theDrinkName.first().isDigit() }
.thenBy { it.theDrinkName.toLowerCase() }
).filter { it.strength == 2 || it.strength == 3 }
问题是我需要按 Int 数组进行过滤以对齐保存在 SharedPreferences 中的内容。
如何通过提供 Int 数组来过滤此数据的强度 属性?
想到的第一个解决方案是检查 strength
属性 是否包含在 filteredStrengthArray
中:
val filteredStrengthArray = arrayListOf<Int>(2,3)
val allDrinks = DrinkData.generateAllDrinks().sortedWith(
...
).filter { filteredStrengthArray.isEmpty() || filteredStrengthArray.contains(it.strength) }