代码之家  ›  专栏  ›  技术社区  ›  Ticherhaz FreePalestine אור מזרחי

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

  •  0
  • Ticherhaz FreePalestine אור מזרחי  · 技术社区  · 5 年前

    假设我有一个模型班。

    data class Bike(
        val bikeId: String? = null,
        val type: String? = null,
        val color: String? = null,
    )
    

    如果我想知道 color ,我可以使用它:-

    val freqs = list.groupingBy { it.color }.eachCount()
    

    结果将是:-

    {GREEN=3, YELLOW=12}
    

    如何计数在哪里 type 还包括?

    示例结果如下:-

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

    等等

    2 回复  |  直到 5 年前
        1
  •  3
  •   Joffrey    5 年前

    @布罗特解 Pair 在大多数情况下可能足够了。

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

    data class BikeCategory(val color: String?, val type: String?)
    
    val freqs = list.groupingBy { BikeCategory(it.color, it.type) }.eachCount()
    

    在这个解决方案中创建的实例并不比使用成对的实例多,不同之处在于,当您稍后使用地图时,这些对象更容易发现/可读。

    根据您组织代码和使用此结果的方式,您可能还需要考虑使用地图来表示这些分组:

    val freqs = list.groupBy { it.color }.mapValues { (_, g) -> g.groupBy { it.type } }
    
        2
  •  3
  •   broot    5 年前

    对于每个项目,您需要创建一个包含这两个字段的数据对象。易于理解的 Pair 此处应足够:

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

    只需注意 it.type to it.color 基本上与 Pair(it.type, it.color) .