Jak ograniczyć ilość zwrotów Realm przedmiotów? .findAll zwraca wszystkie wiersze pasujące do zapytania, a .findFirst zwraca tylko pierwszą. Ale co z czymś podobnym do pierwszego 1000? .findAll może zwrócić tak wiele wierszy, że zużywa zbyt dużo pamięci.Limit Realm wyniki
Odpowiedz
Fajną rzeczą jest to, że nie musisz martwić się tym w Królestwie. Obiekt wynikowy zwracany z zapytania jest leniwie ładowany do obiektów i ich pól podczas uzyskiwania do nich dostępu. Twoje obiekty nigdy nie są kopiowane, a zatem reprezentowane tylko raz w pamięci/na dysku.
(Obecny) szczegół implementacji tego jest taki, że obiekt RealmResults zwrócony z zapytania jest po prostu listą odniesień do pasujących obiektów. Te referencje to małe liczby, które są przechowywane w skompresowanej formie, więc zajmują bardzo mało pamięci. Tak więc nawet przy 100 000 meczach nie zajmowałoby to dużo pamięci. I wymagałoby to tej samej ilości pamięci dla wszystkich rodzajów obiektów, bez względu na to, czy mają one jedno pole int, czy setki pól z łańcuchami lub dużymi binariami.
Jednym ze sposobów może być to, jeśli naprawdę chcesz tylko RealmResults
korzystając Streamlimit
metoda:
//get all results of your choice query
RealmResults<TypeClass> entities = realm.where(TypeClass.class).findAll();
//limit using Stream
List<Integer> ids = Stream.of(entities).limit(10).map(x -> x.Id).collect(Collectors.toList());
//return only those ids elments
return realm.where(TypeClass.class).in("Id", ids.toArray(new Integer[])).findAll();
Realm obecnie nie zapewniają żadnej funkcji granicznej, ale jeśli chcesz pierwsze elementy N
int N=10; // whatever value you want
Realm mRealm=Realm.getDefaultInstance();
RealmResults<Example> list= mRealm.where(Example.class).findAll();
list.subList(0,N);
dla ostatnich elementów N
Udało mi się znaleźć rozwiązanie, aby to osiągnąć po tylu dniach, używając zapytania "między" znalezionego w oficjalnym dokumencie. Jeśli chcesz pobrać pierwsze N elementów, Po prostu podaj liczbę od i do z nazwą pola, jak poniżej.
realm.where(clazz).between("count",0,1000).findAll();
Gdzie,
"liczyć" = nazwa pola (czyli nazwę zmiennej w POJO)
"0" = Zakres Od
"1000" = Range na
Na przykład: Powyższe zapytanie pobiera pierwszą 0 do 1000, jak RealmResults.
Uwaga: powyższe rozwiązanie działa tylko w przypadku posiadania unikalnego identyfikatora z liczbą wierszy. W moim przypadku ręcznie wstawiłem wartość liczby wierszy przed wstawieniem wartości do dziedziny.
- 1. ORDER BY Data - Realm (Android)
- 2. Zaktualizowany model Realm Swift
- 3. RETROFIT POST Realm obiekt
- 4. Realm data-query
- 5. Jak poprawnie używać Realm
- 6. Wymienia obsługę z Realm?
- 7. Realm Migracja nie działa
- 8. Wyniki Lucene Wyniki
- 9. Realm: sortując własności obiektu podrzędnego
- 10. Tablica magazynów w obiekcie Realm
- 11. Aktualizowanie/zmienianie klucza szyfrowania Realm
- 12. Realm Test jednostki na Androida
- 13. Tworzenie GSON & Realm gra fajnie
- 14. Realm, RxJava, asObservable() i doOnUnsubscribe()
- 15. Realm na systemie Windows 10
- 16. Domyślna baza danych Android Realm
- 17. Zamówienie według wielu właściwości za pomocą domeny Realm
- 18. LIMIT MySQL przed grupowaniem?
- 19. Android - Który używać Active Android lub Realm
- 20. Android Realm copyToRealmOrUpdate aktualizuje istniejące pola
- 21. Zachowanie Realm and auto increment (Android)
- 22. Błąd: Obiekt został usunięty lub unieważniony. (Realm)
- 23. Realm Java porządek z wieloma polami
- 24. Jak ustawić "realm" za pomocą PHP OAuth?
- 25. Realm for React-native. zresetuj bazę danych
- 26. Jak usunąć obiekt z Realm Database Android?
- 27. Pobierz kursor za pomocą biblioteki Realm
- 28. Realm VS Room in Android app
- 29. Doctrine 2 limit podzapytania
- 30. Ogranicz wyniki w Apilility
Nie zapomnij o ponownym przeliczeniu ich w RealmChangeListener 'entity's – EpicPandaForce