gpt4 book ai didi

android - Realm for Android – RealmResult.sort() 进行基于字符串的排序?

转载 作者:行者123 更新时间:2023-11-29 15:04:46 29 4
gpt4 key购买 nike

在我的应用程序中,我正在从 Realm 查询一些关于以下模型类的数据。之后,我使用 realmResults.sort("point") 对结果数据进行排序。但结果不如预期。

模型类

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<QtyDiscount> 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}]

排序后和之前一样。

所以我尝试使用下面的代码编写自己的排序过程,但它会生成异常并提示,因为它们是 Realm 对象,无法替换。

有什么帮助吗?

排序代码

        List<FreeItem> result = realmResults.subList(0, realmResults.size());
Collections.sort(result, new Comparator<FreeItem>() {
@Override
public int compare(FreeItem lhs, FreeItem rhs) {
if(lhs.getPoint()>rhs.getPoint())return 1;
if(lhs.getPoint()<rhs.getPoint())return -1;
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)

最佳答案

您可以使用 findAllSorted() 而不是使用 findAll() 方法并且您还可以给出 ASCENDINGDESCENDING 顺序。

来自 Realm 文档:

findAllSorted(java.lang.String[] fieldNames, Sort[] sortOrders)

Finds all objects that fulfill the query conditions and sorted by specific field names.

Parameters:

fieldNames - an array of field names to sort by.

sortOrders - how to sort the field names.

Returns: a RealmResults containing objects. If no objects match the condition, a list with zero objects is returned.

你必须使用

plan.getDiscounts().where().equalTo("itemId", productId).findAllSorted("point",Sort.DESCENDING);

代替

plan.getDiscounts().where().equalTo("itemId", productId).findAll();
realmResults.sort("point");

希望对你有用。

关于android - Realm for Android – RealmResult.sort() 进行基于字符串的排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38735404/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com