安装包 io.realm
接口 OrderedRealmCollection<E>
-
- 所有超级接口:
Collection<E>
,io.realm.internal.Freezable<RealmCollection<E>>
,Iterable<E>
,List<E>
,io.realm.internal.ManageableObject
,RealmCollection<E>
- 所有已知的实现类:
OrderedRealmCollectionSnapshot
,RealmList
,RealmResults
public interface OrderedRealmCollection<E> extends List<E>, RealmCollection<E>
OrderedRealmCollection
是一个维护其元素顺序的集合。OrderedRealmCollection
中的每个元素都有一个索引。 因此,每个元素都可以通过其索引进行访问,第一个索引为零。 通常,OrderedRealmCollection
允许重复元素,而集合的元素必须是唯一的。OrderedRealmCollection
分为三种类型。RealmResults
和RealmList
是实时collection。它们始终是最新的,并且永远不会包含无效的RealmObject
。OrderedRealmCollectionSnapshot
则不同。 AnOrderedRealmCollectionSnapshot
can be created from anotherOrderedRealmCollection
. 其大小和元素顺序与创建原始集合时相同。 如果对象被删除,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
具有相同的行为,因为它们都是实时collection。简单的 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
的大小。 要解决此问题,您可以从OrderedRealmCollectionSnapshot
RealmResults
RealmList
或 创建一个 ,并对其执行简单的 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
可以看到,删除后,快照的大小和元素顺序与删除前相同。但该位置的元素将变为无效。
-
-
方法摘要
所有方法 实例方法 抽象方法 修饰符和类型 方法 说明 OrderedRealmCollectionSnapshot<E>
createSnapshot()
从此OrderedRealmCollection
创建快照。boolean
deleteFirstFromRealm()
从 Realm 中删除第一个对象。void
deleteFromRealm(int location)
从 Realm 中删除给定索引处的对象。boolean
deleteLastFromRealm()
从 Realm 中删除最后一个对象。E
first()
获取collection中的第一个对象。E
first(E defaultValue)
获取collection中的第一个对象。E
last()
从collection中获取最后一个对象。E
last(E defaultValue)
从collection中获取最后一个对象。RealmResults<E>
sort(String fieldName)
根据提供的字段以升序对collection进行排序。RealmResults<E>
sort(String[] fieldNames, Sort[] sortOrders)
根据提供的字段和排序顺序对collection进行排序。RealmResults<E>
sort(String fieldName, Sort sortOrder)
根据提供的字段和排序顺序对collection进行排序。RealmResults<E>
sort(String fieldName1, Sort sortOrder1, String fieldName2, Sort sortOrder2)
根据提供的字段和排序顺序对collection进行排序。-
从接口 java.util 继承的方法collection
parallelStream, removeIf, stream, toArray
-
从接口 java.util 继承的方法列表
add, add, addAll, addAll, clear, contains, containsAll, equals, get, hashCode, indexOf, isEmpty, iterator, lastIndexOf, listIterator, listIterator, remove, remove, removeAll, replaceAll, retainAll, set, size, sort, spliterator, subList, toArray, toArray
-
-
-
-
方法详细信息
-
first
@Nullable E first()
获取collection中的第一个对象。- 返回:
- 第一个对象。
- 抛出异常:
IndexOutOfBoundsException
- 如果collection为空。
-
first
@Nullable E first( @Nullable E defaultValue)
获取集合中的第一个对象。 如果collection为空,将使用提供的默认。- 返回:
- 第一个对象或提供的默认值。
-
last
@Nullable E last()
从collection中获取最后一个对象。- 返回:
- 最后一个对象。
- 抛出异常:
IndexOutOfBoundsException
- 如果collection为空。
-
last
@Nullable E last( @Nullable E defaultValue)
从collection中获取最后一个对象。如果collection为空,将使用提供的默认。- 返回:
- 最后一个对象或提供的默认值。
-
sort
RealmResults < E > sort( String fieldName)
根据提供的字段以升序对collection进行排序。- 参数:
fieldName
- 作为排序依据的字段名称。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。- 返回:
- 将创建并返回一个新的已排序
RealmResults
。 原始collection保持不变。 - 抛出异常:
IllegalArgumentException
- 如果字段名称不存在或其类型无效。IllegalStateException
- 如果 Realm 已关闭、在错误的线程上调用或者collection是非托管collection。
-
sort
RealmResults < E > sort( String fieldName, Sort sortOrder)
根据提供的字段和排序顺序对collection进行排序。- 参数:
fieldName
- 作为排序依据的字段名称。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。sortOrder
- 排序依据的方向。- 返回:
- 将创建并返回一个新的已排序
RealmResults
。 原始collection保持不变。 - 抛出异常:
IllegalArgumentException
- 如果字段名称不存在或类型无效。IllegalStateException
- 如果 Realm 已关闭、在错误的线程上调用或者collection是非托管collection。
-
sort
RealmResults < E > sort( 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保持不变。 - 抛出异常:
IllegalArgumentException
- 如果字段名不存在或类型无效。IllegalStateException
- 如果 Realm 已关闭、在错误的线程上调用或者collection是非托管collection。
-
sort
RealmResults < E > sort( String [] fieldNames, Sort [] sortOrders)
根据提供的字段和排序顺序对collection进行排序。- 参数:
fieldNames
- 作为排序依据的字段名称数组。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。sortOrders
- 排序依据的方向。- 返回:
- 将创建并返回一个新的已排序
RealmResults
。 原始collection保持不变。 - 抛出异常:
IllegalArgumentException
- 如果字段名不存在或类型无效。IllegalStateException
- 如果 Realm 已关闭、在错误的线程上调用或者collection是非托管collection。
-
deleteFromRealm
void deleteFromRealm(int 位置)
从 Realm 中删除给定索引处的对象。 这也会将其从collection中删除。- 参数:
location
- 标识要删除的对象的数组索引。- 抛出异常:
IndexOutOfBoundsException
- 如果location < 0 || location >= size()
。IllegalStateException
- 如果 Realm 已关闭或从错误的线程调用该方法。UnsupportedOperationException
- 如果集合为非托管。
-
deleteFirstFromRealm
boolean deleteFirstFromRealm()
从 Realm 中删除第一个对象。 这也会将其从该collection中删除。- 返回:
true
如果删除了对象,则为false
。- 抛出异常:
IllegalStateException
- 如果 Realm 已关闭或在错误的线程上调用了该方法。UnsupportedOperationException
- 如果集合为非托管。
-
deleteLastFromRealm
boolean deleteLastFromRealm()
从 Realm 中删除最后一个对象。 这也会将其从该collection中删除。- 返回:
true
如果删除了对象,则为false
。- 抛出异常:
IllegalStateException
- 如果 Realm 已关闭或从错误的线程调用该方法。UnsupportedOperationException
- 如果集合为非托管。
-
createSnapshot
OrderedRealmCollectionSnapshot < E > createSnapshot()
从此OrderedRealmCollection
创建快照。- 返回:
- 此collection的快照。
- 抛出异常:
IllegalStateException
- 如果 Realm 已关闭或从错误的线程调用该方法。UnsupportedOperationException
- 如果集合为非托管。- 另请参阅:
OrderedRealmCollectionSnapshot
-
-