패키지 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 는 요소의 순서를 유지하는 collection입니다. OrderedRealmCollection 의 모든 요소에는 인덱스가 있습니다. 따라서 각 요소는 첫 번째 인덱스가 0인 인덱스로 액세스할 수 있습니다. 일반적으로 OrderedRealmCollection는 요소가 고유해야 하는 세트와 달리 중복 요소를 허용합니다.

    OrderedRealmCollection 에는 세 가지 유형이 있습니다. RealmResultsRealmList 은(는) 라이브 collection입니다. 이 필드는 항상 최신 상태이며 잘못된 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
     
     

    라이브 collection에서 생성된 반복자는 반복자가 생성될 때 안정적인 뷰를 생성하므로 반복기에 영향 없이 반복하는 동안 요소를 삭제하고 수정할 수 있습니다. 그러나 반복자를 지원하는 RealmResults 는 여전히 실시간 업데이트되므로 반복할 때 요소의 크기와 순서가 변경될 수 있습니다. RealmList 는 둘 다 라이브 collection이므로 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 크기에 즉시 영향을 미칩니다. 이 문제를 해결하려면 OrderedRealmCollectionSnapshot RealmResults 또는 에서 을 RealmList 만들고 대신 간단한 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
     
     

    볼 수 있듯이 삭제 후에도 스냅샷의 크기와 요소 순서는 이전과 동일하게 유지됩니다. 그러나 해당 위치의 요소는 유효하지 않게 됩니다.

    • 메서드 세부 정보

      • first

        @Nullable
        E first()
        컬렉션에서 첫 번째 객체를 가져옵니다.
        반환합니다:
        첫 번째 객체입니다.
        예외 처리:
        IndexOutOfBoundsException - collection이 비어 있는 경우.
      • first

        @Nullable
        E first​(@Nullable
                E defaultValue)
        collection에서 첫 번째 객체를 가져옵니다. 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 - 정렬할 필드 이름입니다. 부울, 짧은, int, long, float, double, 날짜 및 문자열 유형의 필드만 지원됩니다.
        반환합니다:
        새로 정렬된 RealmResults 이(가) 생성되어 반환됩니다. 원본 collection은 변경되지 않은 상태로 유지됩니다.
        예외 처리:
        IllegalArgumentException - 필드 이름이 존재하지 않거나 잘못된 유형인 경우
        IllegalStateException - if the Realm이 닫혔거나 잘못된 스레드에서 호출되었거나 컬렉션이 관리되지 않는 collection 경우
      • sort

        RealmResults<E> sort​(String fieldName,
                             Sort sortOrder)
        제공된 필드와 정렬 순서에 따라 collection을 정렬합니다.
        매개변수:
        fieldName - 정렬할 필드 이름입니다. 부울, 짧은, int, long, float, double, 날짜 및 문자열 유형의 필드만 지원됩니다.
        sortOrder - 정렬 기준 방향입니다.
        반환합니다:
        새로 정렬된 RealmResults 이(가) 생성되어 반환됩니다. 원본 collection은 변경되지 않은 상태로 유지됩니다.
        예외 처리:
        IllegalArgumentException - 필드 이름이 존재하지 않거나 잘못된 유형인 경우
        IllegalStateException - if the Realm이 닫혔거나 잘못된 스레드에서 호출되었거나 컬렉션이 관리되지 않는 collection 경우
      • sort

        RealmResults<E> sort​(문자열 fieldName1,
                             정렬 sortOrder1,
                             문자열 fieldName2,
                             정렬 sortOrder2)
        제공된 필드와 정렬 순서에 따라 collection을 정렬합니다.
        매개변수:
        fieldName1 - 첫 번째 필드 이름입니다. 부울, 짧은, int, long, float, double, 날짜 및 문자열 유형의 필드만 지원됩니다.
        sortOrder1 - 첫 번째 필드의 정렬 순서입니다.
        fieldName2 - 두 번째 필드 이름입니다. 부울, 짧은, int, long, float, double, 날짜 및 문자열 유형의 필드만 지원됩니다.
        sortOrder2 - 두 번째 필드의 정렬 순서입니다.
        반환합니다:
        새로 정렬된 RealmResults 이(가) 생성되어 반환됩니다. 원본 collection은 변경되지 않은 상태로 유지됩니다.
        예외 처리:
        IllegalArgumentException - 필드 이름이 존재하지 않거나 잘못된 유형인 경우
        IllegalStateException - if the Realm이 닫혔거나 잘못된 스레드에서 호출되었거나 컬렉션이 관리되지 않는 collection 경우
      • sort

        RealmResults<E> sort​(String[] fieldNames,
                             Sort[] sortOrders)
        제공된 필드와 정렬 순서에 따라 collection을 정렬합니다.
        매개변수:
        fieldNames - 정렬 기준이 되는 필드 이름의 배열입니다. 부울, 짧은, int, long, float, double, 날짜 및 문자열 유형의 필드만 지원됩니다.
        sortOrders - 정렬 기준 방향.
        반환합니다:
        새로 정렬된 RealmResults 이(가) 생성되어 반환됩니다. 원본 collection은 변경되지 않은 상태로 유지됩니다.
        예외 처리:
        IllegalArgumentException - 필드 이름이 존재하지 않거나 잘못된 유형인 경우
        IllegalStateException - if the Realm이 닫혔거나 잘못된 스레드에서 호출되었거나 컬렉션이 관리되지 않는 collection 경우
      • deleteFromRealm

        void deleteFromRealm​(int 위치)
        Realm에서 지정된 인덱스에 있는 객체를 삭제합니다. 이렇게 하면 collection에서도 제거됩니다.
        매개변수:
        location - 제거할 객체를 식별하는 배열 인덱스입니다.
        예외 처리:
        IndexOutOfBoundsException - location < 0 || location >= size() 인 경우.
        IllegalStateException - Realm이 닫혔거나 잘못된 스레드에서 메서드가 호출된 경우
        UnsupportedOperationException - collection이 관리되지 않는 경우.
      • deleteFirstFromRealm

        부울 deleteFirstFromRealm()
        Realm에서 첫 번째 객체를 삭제합니다. 이렇게 하면 이 collection에서도 제거됩니다.
        반환합니다:
        true 객체가 삭제되면 false , 그렇지 않으면 을 반환합니다.
        예외 처리:
        IllegalStateException - Realm이 닫혔거나 잘못된 스레드에서 메서드가 호출된 경우
        UnsupportedOperationException - collection이 관리되지 않는 경우.
      • deleteLastFromRealm

        부울 deleteLastFromRealm()
        Realm에서 마지막 객체를 삭제합니다. 이렇게 하면 이 collection에서도 제거됩니다.
        반환합니다:
        true 객체가 삭제되면 false , 그렇지 않으면 을 반환합니다.
        예외 처리:
        IllegalStateException - Realm이 닫혔거나 잘못된 스레드에서 메서드가 호출된 경우
        UnsupportedOperationException - collection이 관리되지 않는 경우.