android realm排序,Realm for Android - RealmResult.sort()做基于字符串的排序?

在Android应用中使用Realm进行数据查询时,遇到RealmResult.sort()方法对基于字符串的排序不按预期工作的问题。代码示例展示了如何查询FreeItem模型类的数据并尝试根据'point'字段进行排序,但结果未改变。当尝试自定义排序逻辑时,出现了'UnsupportedOperationException'异常。寻求解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在我的应用程序中,我正在查询关于模型类下面的某些数据。 然后我使用realmResults.sort("point")对结果数据进行排序。 但结果不符合预期。Realm for Android - RealmResult.sort()做基于字符串的排序?

Model类

public class FreeItem extends RealmObject {

private int itemId;

private int point;

private int freeQty;

private int freeItemId;

// geters setters

}

查询代码

if(realm==null||realm.isClosed()){

realm = Realm.getInstance(config);

}

PromotionPlan plan = realm.where(PromotionPlan.class).equalTo("id", planId).findFirst();

if(plan!=null) {

RealmResults realmResults = plan.getDiscounts().where().equalTo("itemId", productId).findAll();

realmResults.sort("point");

return realmResults.subList(0,realmResults.size());

}

return new ArrayList<>();

之前排序(调试值)

FreeItem = [{itemId:61},{point:12},{freeQty:1},{freeItemId:61}]

FreeItem = [{itemId:61},{point:120},{freeQty:16},{freeItemId:61}]

FreeItem = [{itemId:61},{point:24},{freeQty:3},{freeItemId:61}]

FreeItem = [{itemId:61},{point:60},{freeQty:8},{freeItemId:61}]

排序后,它是和以前一样。

所以我试图用下面的代码编写自己的排序过程,但它会生成一个异常并说,因为它们是领域对象无法替代的。

任何帮助?

分类编码

List result = realmResults.subList(0, realmResults.size());

Collections.sort(result, new Comparator() {

@Override

public int compare(FreeItem lhs, FreeItem rhs) {

if(lhs.getPoint()>rhs.getPoint())return 1;

if(lhs.getPoint()

return 0;

}

});

异常

java.lang.UnsupportedOperationException: Replacing and element is not supported.

at io.realm.RealmResults$RealmResultsListIterator.set(RealmResults.java:826)

at io.realm.RealmResults$RealmResultsListIterator.set(RealmResults.java:757)

at java.util.AbstractList$SubAbstractList$SubAbstractListIterator.set(AbstractList.java:232)

at java.util.Collections.sort(Collections.java:1888)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值