如何使用ArrayList对象Kotlin中的2个条件获取计数

如何使用ArrayList对象Kotlin中的2个条件获取计数,kotlin,Kotlin,假设我有这个模型课 data class Bike( val bikeId: String? = null, val type: String? = null, val color: String? = null, ) 如果我想获得颜色的计数,我可以使用:- val freqs = list.groupingBy { it.color }.eachCount() 结果将是:- {GREEN=3, YELLOW=12} 如何获取还包括类型的计数 示例结果如下:- {M

假设我有这个模型课

data class Bike(
    val bikeId: String? = null,
    val type: String? = null,
    val color: String? = null,
)
如果我想获得
颜色的计数
,我可以使用:-

val freqs = list.groupingBy { it.color }.eachCount()
结果将是:-

{GREEN=3, YELLOW=12}
如何获取还包括
类型的计数

示例结果如下:-

{MOUNTAIN and GREEN=2}
{FOLDING and GREEN=1}

{MOUNTAIN and YELLOW=5}
{FOLDING and YELLOW=1}
{BMX and YELLOW=6}

依此类推。

对于每个项目,您需要创建一个包含这两个字段的数据对象。简单的
配对
在这里就足够了:

list.groupingBy { it.type to it.color }.eachCount()

请注意
it.type to it.color
基本上与
Pair(it.type,it.color)
@broot的
Pair
解决方案在大多数情况下可能已经足够了

如果需要传递此数据,则
对于哪个组件是哪个组件的信息不是很丰富。
在这种情况下,我会创建一个适当的类来表示分组的键:

数据类BikeCategory(val颜色:String?,val类型:String?)
val freqs=list.groupingBy{BikeCategory(it.color,it.type)}.eachCount()
在这个解决方案中创建的实例并不比使用对创建的实例多,不同之处在于,当您稍后使用映射时,这些对象更容易发现/可读

取决于如何组织代码并使用此结果,您可能还想考虑使用映射图来表示这些分组:

val freqs=list.groupBy{it.color}.mapValues{({,g)->g.groupBy{it.type}