Làm cách nào để hạn chế số lượng đối tượng mà Realm trả về? .findAll trả về tất cả các hàng khớp với truy vấn và .findFirst chỉ trả lại hàng đầu tiên. Nhưng những gì về một cái gì đó giống như 1000 đầu tiên? .findAll có thể trả về rất nhiều hàng mà nó tiêu thụ quá nhiều bộ nhớ.Giới hạn kết quả Realm
Trả lời
Điều thú vị là bạn không cần phải lo lắng về điều đó với Realm. Đối tượng kết quả được trả về từ một truy vấn đang tải các đối tượng và các trường của nó một cách lười biếng khi bạn truy cập chúng. Các đối tượng của bạn không bao giờ được sao chép và do đó chỉ được biểu diễn một lần trong bộ nhớ/đĩa.
Chi tiết triển khai (hiện tại) của điều này là đối tượng RealmResults trả về từ truy vấn chỉ là danh sách tham chiếu đến đối tượng phù hợp. Những tài liệu tham khảo là những con số nhỏ được lưu trữ nén để họ mất rất ít bộ nhớ. Vì vậy, ngay cả với 100.000 trận đấu nó thực sự sẽ không mất nhiều bộ nhớ. Và nó sẽ chiếm cùng một lượng bộ nhớ cho tất cả các loại đối tượng, cho dù chúng có một trường int hay hàng trăm trường có chuỗi hoặc nhị phân lớn.
Một cách có thể này, nếu bạn thực sự muốn chỉ RealmResults
, sử dụng Streamlimit
phương pháp:
//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 hiện không cung cấp bất kỳ chức năng giới hạn nhưng nếu bạn muốn các yếu tố N đầu tiên
int N=10; // whatever value you want
Realm mRealm=Realm.getDefaultInstance();
RealmResults<Example> list= mRealm.where(Example.class).findAll();
list.subList(0,N);
cho các phần tử N cuối cùng
Tôi đã tìm ra giải pháp để đạt được điều này sau nhiều ngày sử dụng truy vấn "giữa" như được tìm thấy trong tài liệu chính thức https://realm.io/docs/java/latest
Nếu bạn muốn tìm nạp phần tử N đầu tiên, Chỉ cần chuyển số từ và đến với tên trường như dưới đây
realm.where(clazz).between("count",0,1000).findAll();
đâu,
"đếm" = Dòng tên (tức là tên biến trong POJO của bạn)
"0" = Dải Từ
"1000" = Phạm vi đến
Ví dụ: Truy vấn trên sẽ tìm nạp 0 đến 1000 đầu tiên dưới dạng RealmResults.
Lưu ý: Giải pháp trên chỉ hoạt động nếu bạn có một số id duy nhất có số lượng hàng. Trong trường hợp của tôi, tôi chèn giá trị đếm hàng theo cách thủ công trước khi chèn các giá trị vào trong Realm.
- 1. Giới hạn kết quả trong Apigility
- 2. Tiêu chuẩn API giới hạn kết quả trong subquery
- 3. Giới hạn kết quả trả về trong CoreData
- 4. Giới hạn số lượng kết quả Get-ChildItem
- 5. Giới hạn kết quả trong jQuery Tự động hoàn thành
- 6. Giới hạn kết quả truy vấn SQL trong MySQL
- 7. kết quả giới hạn của mỗi trong handlebars.js
- 8. Haystack và Elasticsearch: số Giới hạn kết quả
- 9. Giới hạn kết nối WCF
- 10. Làm cách nào để giới hạn kết quả thực thể được liên kết trong Doctrine2?
- 11. Caching các liên kết giới hạn
- 12. rails tìm kiếm giới hạn tổng số kết quả tìm kiếm/nhận được số kết quả cố định
- 13. Giới hạn kết nối Java ServerSocket?
- 14. WebRTC: giới hạn kết nối ngang hàng?
- 15. Kết quả MapReduce dường như bị giới hạn ở mức 100?
- 16. Góc 2: Cách giới hạn số lượng kết quả tìm kiếm trong ng2-completer?
- 17. MYSQL JOIN hai bảng giới hạn kết quả từ bảng thứ hai theo ngày
- 18. Giới hạn thời gian mà .split() tách ra, thay vì cắt ngắn mảng kết quả
- 19. Kết quả giới hạn ở quốc gia có tự động hoàn thành Google Place?
- 20. Cách giới hạn kết quả truy vấn bằng bộ lọc Django Rest
- 21. jpa 2 giới hạn ngủ đông (kết quả tối đa) cho một CriteriaQuery
- 22. Siêu dữ liệu - giới hạn kết quả bằng cách sử dụng TOP
- 23. Sử dụng chức năng xếp hạng postgres để giới hạn đến n kết quả hàng đầu
- 24. Giới hạn số lượng kết quả trong Meteor ở phía máy chủ?
- 25. Pymongo con trỏ giới hạn (1) trả về nhiều hơn 1 kết quả
- 26. Làm cách nào để giới hạn kết quả của lệnh tìm trong bash?
- 27. MySQL: sắp xếp theo và giới hạn cho kết quả sai
- 28. cách giới hạn các kết quả phù hợp trên perl bằng regex?
- 29. Cách sắp xếp VÀ giới hạn kết quả Noe4j bằng Gremlin?
- 30. Giới hạn mục nhập trong kết quả 'Trang chủ' của Graph API
Đừng quên tính toán lại những điều này trong 'entity''s RealmChangeListener – EpicPandaForce