Android Room中如何按条件排序:先非零排名升序再排零值项?
Android Room 实现指定排序逻辑
要实现先按ranking升序排列非零值条目,再显示所有ranking为0的条目的需求,可通过在Room查询中使用CASE表达式控制排序优先级来实现。
核心查询实现
在你的ItemDao中编写如下查询方法:
@Dao interface ItemDao { @Query(""" SELECT * FROM Item ORDER BY CASE WHEN ranking != 0 THEN 0 ELSE 1 END, ranking ASC """) suspend fun getAllItemsOrdered(): List<Item> }
排序逻辑说明
CASE WHEN ranking != 0 THEN 0 ELSE 1 END:给非零ranking的条目分配优先级0,零值条目分配优先级1。优先级数值越小越靠前,因此非零条目会整体排在零值条目之前。ranking ASC:在优先级相同的分组内(即非零条目组),按ranking字段升序排列。零值条目因ranking均为0,默认保持数据库中的原有顺序。
可选:对零值条目额外排序
如果需要零值条目也按特定字段(比如id)排序,可修改查询语句:
@Query(""" SELECT * FROM Item ORDER BY CASE WHEN ranking != 0 THEN 0 ELSE 1 END, ranking ASC, id ASC """) suspend fun getAllItemsOrdered(): List<Item>
内容的提问来源于stack exchange,提问作者Bekzhan
相关产品推荐
相关产品推荐

