Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ / /

接口 OrderedRealmCollection

在此页面上

  • io.realm
  • 方法摘要
  • 继承方法
  • 方法详细信息
  • createSnapshot
  • deleteFirstFromRealm
  • deleteFromRealm
  • deleteLastFromRealm
  • first
  • last
  • sort

实现的接口:

  • java.util.List

  • io.realm.RealmCollection

  • java.util.Collection

  • java.lang.Iterable

  • java.util.Collection

  • java.lang.Iterable

OrderedRealmCollection是一个为其元素维护顺序的collection。OrderedRealmCollection中的每个元素都有一个索引。 因此,每个元素都可以通过其索引进行访问,第一个索引为零。 通常, OrderedRealmCollection允许重复元素,而集合的元素必须是唯一的。

OrderedRealmCollection分为三种类型。 RealmResultsRealmList是实时集合。 它们始终是最新的,并且永远不会包含无效的RealmObjectOrderedRealmCollectionSnapshot则不同。 可以从另一个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仍会实时更新,这意味着元素的大小和顺序可能会在迭代时发生变化。 RealmListRealmResults具有相同的行为,因为它们都是实时集合。

简单的 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的大小。 要解决此问题,您可以从 RealmResultsRealmList 创建 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
int location
)

从 Realm 中删除给定索引处的对象。

公共布尔值

从 Realm 中删除最后一个对象。

公用E
E defaultValue
)

获取collection中的第一个对象。

公用E

获取collection中的第一个对象。

公用E
E defaultValue
)

从collection中获取最后一个对象。

公用E
last ()

从collection中获取最后一个对象。

java.lang.String[] fieldNames,
io.realm.Sort[] sortOrders
)

根据提供的字段和排序顺序对collection进行排序。

String fieldName1,
Sort sortOrder1,
String fieldName2,
Sort sortOrder2
)

根据提供的字段和排序顺序对collection进行排序。

String fieldName,
Sort sortOrder
)

根据提供的字段和排序顺序对collection进行排序。

String fieldName
)

根据提供的字段以升序对collection进行排序。

从此OrderedRealmCollection创建快照。

返回:

此collection的快照。

抛出异常

提示

另请参阅:

public boolean deleteFirstFromRealm ()

从 Realm 中删除第一个对象。 这也会将其从该collection中删除。

返回:

true 如果删除了对象,则为false

抛出异常

public void deleteFromRealm (
int location
)

从 Realm 中删除给定索引处的对象。 这也会将其从collection中删除。

参数

  • location - 标识要删除的对象的数组索引。

抛出异常

public boolean deleteLastFromRealm ()

从 Realm 中删除最后一个对象。 这也会将其从该collection中删除。

返回:

true 如果删除了对象,则为false

抛出异常

public E first (
E defaultValue
)

获取集合中的第一个对象。 如果collection为空,将使用提供的默认。

返回:

第一个对象或提供的默认值。

public E first ()

获取collection中的第一个对象。

返回:

第一个对象。

抛出异常

public E last (
E defaultValue
)

从collection中获取最后一个对象。如果collection为空,将使用提供的默认。

返回:

最后一个对象或提供的默认值。

public E last ()

从collection中获取最后一个对象。

返回:

最后一个对象。

抛出异常

java.lang.String[] fieldNames,
io.realm.Sort[] sortOrders
)

根据提供的字段和排序顺序对collection进行排序。

参数

  • fieldNames - 作为排序依据的字段名称数组。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。

  • sortOrders - 排序依据的方向。

返回:

将创建并返回新的排序RealmResults 。 原始collection保持不变。

抛出异常

String fieldName1,
Sort sortOrder1,
String fieldName2,
Sort sortOrder2
)

根据提供的字段和排序顺序对collection进行排序。

参数

  • fieldName1 - 第一个字段名称。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。

  • sortOrder1 — 第一个字段的排序顺序。

  • fieldName2 — 第二个字段名称。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。

  • sortOrder2 — 第二个字段的排序顺序。

返回:

将创建并返回新的排序RealmResults 。 原始collection保持不变。

抛出异常

String fieldName,
Sort sortOrder
)

根据提供的字段和排序顺序对collection进行排序。

参数

  • fieldName - 作为排序依据的字段名称。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。

  • sortOrder - 排序依据的方向。

返回:

将创建并返回新的排序RealmResults 。 原始collection保持不变。

抛出异常

String fieldName
)

根据提供的字段以升序对collection进行排序。

参数

  • fieldName - 作为排序依据的字段名称。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。

返回:

将创建并返回新的排序RealmResults 。 原始collection保持不变。

抛出异常

后退

OrderedCollectionChangeSet.State