OrderedRealmCollection 인터페이스
이 페이지의 내용
io.realm
구현된 인터페이스:
OrderedRealmCollection
은(는) 해당 요소의 순서를 유지하는 컬렉션입니다. OrderedRealmCollection
의 모든 요소에는 인덱스가 있습니다. 따라서 각 요소는 첫 번째 인덱스가 0인 인덱스로 액세스할 수 있습니다. 일반적으로 OrderedRealmCollection
는 요소가 고유해야 하는 세트와 달리 중복 요소를 허용합니다.
OrderedRealmCollection 에는 세 가지 유형이 있습니다. RealmResults 및 RealmList 는 라이브 컬렉션입니다. 파일은 항상 최신 상태이며 잘못된 RealmObject 를 포함하지 않습니다. OrderedRealmCollectionSnapshot 이 다릅니다. OrderedRealmCollectionSnapshot 은 다른 OrderedRealmCollection 에서 만들 수 있습니다. 크기와 요소 순서는 원본 컬렉션이 생성되었을 때와 동일하게 유지됩니다. 객체가 삭제되면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
라이브 컬렉션에서 생성된 반복자는 반복자가 생성될 때 안정적인 뷰를 생성하므로 반복기에 영향을 주지 않고 반복하는 동안 요소를 삭제하고 수정할 수 있습니다. However, the RealmResults
backing the iterator will still be live updated meaning that size and order of elements can change when iterating. 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-loop을 수행할 수 있습니다.
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에서 마지막 객체를 삭제합니다. |
public E | 컬렉션에서 첫 번째 객체를 가져옵니다. |
public E | first () 컬렉션에서 첫 번째 객체를 가져옵니다. |
public E | collection에서 마지막 객체를 가져옵니다. |
public E | last () collection에서 마지막 객체를 가져옵니다. |
공개 RealmResults | 제공된 필드와 정렬 순서에 따라 collection을 정렬합니다. |
공개 RealmResults | |
공개 RealmResults | |
공개 RealmResults |
상속된 메서드
메서드 세부 정보
createSnapshot
public OrderedRealmCollectionSnapshot createSnapshot () |
---|
이 OrderedRealmCollection 에서 스냅샷을 만듭니다. 반환 이 collection의 스냅샷입니다. 스로우
|
deleteFirstFromRealm
public boolean deleteFirstFromRealm () |
---|
Realm에서 첫 번째 객체를 삭제합니다. 이렇게 하면 이 collection에서도 제거됩니다. 반환
스로우
|
deleteFromRealm
Realm에서 지정된 인덱스에 있는 객체를 삭제합니다. 이렇게 하면 collection에서도 제거됩니다. 매개변수
스로우
|
deleteLastFromRealm
public boolean deleteLastFromRealm () |
---|
Realm에서 마지막 객체를 삭제합니다. 이렇게 하면 이 collection에서도 제거됩니다. 반환
스로우
|
first
collection에서 첫 번째 객체를 가져옵니다. collection이 비어 있으면 제공된 기본값이 대신 사용됩니다. 반환 첫 번째 객체 또는 제공된 기본값입니다. |
public E first () |
---|
last
collection에서 마지막 객체를 가져옵니다. collection이 비어 있으면 제공된 기본값이 대신 사용됩니다. 반환 마지막 객체 또는 제공된 기본값입니다. |
public E last () |
---|
sort
제공된 필드와 정렬 순서에 따라 collection을 정렬합니다. 매개변수
반환 새로 정렬된 RealmResults 가 생성되어 반환됩니다. 원본 collection은 변경되지 않은 상태로 유지됩니다. 스로우
|
제공된 필드와 정렬 순서에 따라 collection을 정렬합니다. 매개변수
반환 새로 정렬된 RealmResults 가 생성되어 반환됩니다. 원본 collection은 변경되지 않은 상태로 유지됩니다. 스로우
|
제공된 필드와 정렬 순서에 따라 collection을 정렬합니다. 매개변수
반환 새로 정렬된 RealmResults 가 생성되어 반환됩니다. 원본 collection은 변경되지 않은 상태로 유지됩니다. 스로우
|
제공된 필드를 기준으로 collection을 오름차순으로 정렬합니다. 매개변수
반환 새로 정렬된 RealmResults 가 생성되어 반환됩니다. 원본 collection은 변경되지 않은 상태로 유지됩니다. 스로우
|