接口 OrderedRealmCollection
在此页面上
io.realm
实现的接口:
OrderedRealmCollection
是一个为其元素维护顺序的collection。OrderedRealmCollection
中的每个元素都有一个索引。 因此,每个元素都可以通过其索引进行访问,第一个索引为零。 通常, OrderedRealmCollection
允许重复元素,而集合的元素必须是唯一的。
OrderedRealmCollection分为三种类型。 RealmResults和RealmList是实时集合。 它们始终是最新的,并且永远不会包含无效的RealmObject 。 OrderedRealmCollectionSnapshot则不同。 可以从另一个OrderedRealmCollection创建OrderedRealmCollectionSnapshot 。 其大小和元素顺序与创建原始集合时相同。 如果对象被删除, OrderedRealmCollectionSnapshot可能包含无效的RealmObject 。
使用迭代器对OrderedRealmCollection进行迭代始终有效。 您可以删除或修改元素,而不会影响迭代器。 请参阅以下示例:
RealmResults<Dog> dogs = realm.where(Dog.class).findAll(); int s = dogs.size(); // 10 realm.beginTransaction(); for (Dog dog : dogs) { dog.deleteFromRealm(); s = dogs.size(); // This will be decreased by 1 every time after a dog is removed. } realm.commitTransaction(); s = dogs.size(); // 0
从实时collection创建的迭代器将在创建迭代器时创建稳定视图,允许您在迭代时删除和修改元素,而不会影响迭代器。但是,支持迭代器的RealmResults
仍会实时更新,这意味着元素的大小和顺序可能会在迭代时发生变化。 RealmList与RealmResults具有相同的行为,因为它们都是实时集合。
简单的 for 循环则不同。 请参阅以下示例:
RealmResults<Dog> dogs = realm.where(Dog.class).findAll(); realm.beginTransaction(); for (int i = 0; i < dogs.size(); i++) { dogs.get(i).deleteFromRealm(); } realm.commitTransaction(); s = dogs.size(); // 5
上面的示例只删除了RealmResults中的一半元素。 这是因为每个循环dogs.size()
都会减少 1。 循环中发生的删除操作将立即影响RealmResults
的大小。 要解决此问题,您可以从 RealmResults 或 RealmList 创建 OrderedRealmCollectionSnapshot ,并对其执行简单的 for 循环:
RealmResults<Dog> dogs = realm.where(Dog.class).findAll(); OrderedRealmCollectionSnapshot snapshot = dogs.createSnapshot(); // dogs.size() == 10 && snapshot.size() == 10 realm.beginTransaction(); for (int i = 0; i < snapshot.size(); i++) { snapshot.get(0).deleteFromRealm(); // snapshot.get(0).isValid() == false } realm.commitTransaction(); // dogs.size() == 0 && snapshot.size() == 10
可以看到,删除后,快照的大小和元素顺序与删除前相同。但该位置的元素将变为无效。
方法摘要
修饰符和类型 | 方法和说明 |
---|---|
从此OrderedRealmCollection创建快照。 | |
公共布尔值 | 从 Realm 中删除第一个对象。 |
public void | 从 Realm 中删除给定索引处的对象。 |
公共布尔值 | 从 Realm 中删除最后一个对象。 |
公用E | 获取collection中的第一个对象。 |
公用E | first () 获取collection中的第一个对象。 |
公用E | 从collection中获取最后一个对象。 |
公用E | last () 从collection中获取最后一个对象。 |
根据提供的字段和排序顺序对collection进行排序。 | |
继承方法
方法详细信息
createSnapshot
public OrderedRealmCollectionSnapshot createSnapshot () |
---|
从此OrderedRealmCollection创建快照。 返回: 此collection的快照。 抛出异常
|
deleteFirstFromRealm
public boolean deleteFirstFromRealm () |
---|
从 Realm 中删除第一个对象。 这也会将其从该collection中删除。 返回:
抛出异常
|
deleteFromRealm
从 Realm 中删除给定索引处的对象。 这也会将其从collection中删除。 参数
抛出异常
|
deleteLastFromRealm
public boolean deleteLastFromRealm () |
---|
从 Realm 中删除最后一个对象。 这也会将其从该collection中删除。 返回:
抛出异常
|
first
获取集合中的第一个对象。 如果collection为空,将使用提供的默认。 返回: 第一个对象或提供的默认值。 |
public E first () |
---|
last
从collection中获取最后一个对象。如果collection为空,将使用提供的默认。 返回: 最后一个对象或提供的默认值。 |
public E last () |
---|
sort
根据提供的字段和排序顺序对collection进行排序。 参数
返回: 将创建并返回新的排序RealmResults 。 原始collection保持不变。 抛出异常
|
根据提供的字段和排序顺序对collection进行排序。 参数
返回: 将创建并返回新的排序RealmResults 。 原始collection保持不变。 抛出异常
|
根据提供的字段和排序顺序对collection进行排序。 参数
返回: 将创建并返回新的排序RealmResults 。 原始collection保持不变。 抛出异常
|
根据提供的字段以升序对collection进行排序。 参数
返回: 将创建并返回新的排序RealmResults 。 原始collection保持不变。 抛出异常
|