You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift Realm实现类似Android Room的Group By分组统计需求

Realm实现分类名称分组统计(按catname分组并计数)

Realm本身没有像Room那样直接支持GROUP BY COUNT的查询语法,但可以通过以下两种方式实现需求:

方法一:去重查询+逐个统计(适合小数据量)

先查询所有不重复的分类名称,再逐个统计每个分类的出现次数:

Java代码示例

Realm realm = Realm.getDefaultInstance();

// 获取所有去重的catname
RealmResults<CatList> distinctCatNames = realm.where(CatList.class).distinct("catname");

// 存储分类与对应数量
Map<String, Integer> catCountMap = new HashMap<>();
for (CatList cat : distinctCatNames) {
    String name = cat.getCatname();
    long count = realm.where(CatList.class).equalTo("catname", name).count();
    catCountMap.put(name, (int) count);
}

// 输出结果(示例)
for (Map.Entry<String, Integer> entry : catCountMap.entrySet()) {
    System.out.println(entry.getKey() + " " + entry.getValue());
}

realm.close();

Kotlin代码示例

val realm = Realm.getDefaultInstance()

val distinctCatNames = realm.where(CatList::class.java).distinct("catname")
val catCountMap = mutableMapOf<String, Int>()

distinctCatNames.forEach { cat ->
    val name = cat.catname
    val count = realm.where(CatList::class.java).equalTo("catname", name).count().toInt()
    catCountMap[name] = count
}

// 输出结果
catCountMap.forEach { (name, count) ->
    println("$name $count")
}

realm.close()

方法二:全量查询+内存分组(适合大数据量,性能更优)

一次性查询所有数据,利用语言特性在内存中完成分组统计,避免多次数据库查询:

Kotlin代码示例

val realm = Realm.getDefaultInstance()

// 查询所有分类数据
val allCats = realm.where(CatList::class.java).findAll()

// 按catname分组并统计每组数量
val catCountMap = allCats.groupBy { it.catname }.mapValues { it.value.size }

// 输出结果
catCountMap.forEach { (name, count) ->
    println("$name $count")
}

realm.close()

Java代码示例

Realm realm = Realm.getDefaultInstance();

RealmResults<CatList> allCats = realm.where(CatList.class).findAll();

Map<String, Integer> catCountMap = new HashMap<>();
for (CatList cat : allCats) {
    String name = cat.getCatname();
    catCountMap.put(name, catCountMap.getOrDefault(name, 0) + 1);
}

// 输出结果
for (Map.Entry<String, Integer> entry : catCountMap.entrySet()) {
    System.out.println(entry.getKey() + " " + entry.getValue());
}

realm.close();

注意事项

  • 如果catname存在null值,需要额外处理(比如单独分组为"未知分类")
  • 大数据量场景下优先选择方法二,减少数据库IO操作

内容的提问来源于stack exchange,提问作者strawberrygirl20

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 01:12:58