gpt4 book ai didi

android - 如何使用嵌套属性对 RealmList 对象进行排序?

转载 作者:行者123 更新时间:2023-11-29 01:23:00 26 4
gpt4 key购买 nike

我已经开始使用 Realm,我很好奇是否可以通过嵌套属性对 RealmList 对象进行排序。

我有一些 ListModel 对象:

public class ListModel extends RealmObject {

@Required
private String itemName;
...
private RealmList<ItemModel> items;
...
}

ItemModel 是:

public class ItemModel extends RealmObject {

private TagModel tag;
...
private boolean isBought = false;

@PrimaryKey
private long created;
...
}

标签模型是:

public class TagModel extends RealmObject {

@PrimaryKey
private String tagName;
...
private CategoryModel category;
...
}

CategoryModel 是:

public class CategoryModel extends RealmObject {

@PrimaryKey
private int categoryType;
...
}

所以,我真正需要的是拥有这样的东西:

RealmResults<ItemModel> sortedItems= realm.where(ListModel.class)
.equalTo("created", created)
.findFirst().getItems().where().findAllSorted("isBought", Sort.ASCENDING, "tag.category.categoryType", Sort.ASCENDING, "tag.tagName", Sort.ASCENDING);

是否有可能以某种方式实现这一目标?目前,据我所知,不可能使用以下结构 "tag.category.categoryType" 来满足我的需要。

作为临时解决方案,我正在考虑以下方法:

ListModel listModel = realm.where(ListModel.class)
.equalTo("created", created)
.findFirst();

List<ItemModel> items = listModel.getItems();
Collections.sort(items, new Comparator<ItemModel>() {
@Override
public int compare(ItemModel lhs, ItemModel rhs) {
// here some sorting logic
}
});

但我不确定这是正确的方法。

最佳答案

Gonzalo 的方法目前看来不错。但它有点慢,因为访问嵌套项会导致 I/O。在我的例子中,10000 件元素大约需要 30 秒。所以我改进了它以使用缓存。

Collections.sort(medicineClassList, new Comparator<MedicineClass>() {
Map<String, String> primaryKey2SortKey = new HashMap();
@Override
public int compare(MedicineClass lmo, MedicineClass rmo) {
String lmo_string = pullSortKey(lmo);
String rmo_string = pullSortKey(rmo);
return lmo_string.compareToIgnoreCase(rmo_string);
}

private String pullSortKey(MedicineClass item) {
if (primaryKey2SortKey.containsKey(item.getPrimaryKey())) {
return primaryKey2SortKey.get(item.getPrimaryKey());
}
String sortKey = item.getProduct_request().getProduct().getName();
primaryKey2SortKey.put(item.getPrimaryKey(), sortKey);
return sortKey;
}
});

关于android - 如何使用嵌套属性对 RealmList 对象进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35652349/

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