diff --git a/realm/realm-library/src/androidTest/java/io/realm/RealmQueryTests.java b/realm/realm-library/src/androidTest/java/io/realm/RealmQueryTests.java index a29e98a8c5..5fae8df1b9 100644 --- a/realm/realm-library/src/androidTest/java/io/realm/RealmQueryTests.java +++ b/realm/realm-library/src/androidTest/java/io/realm/RealmQueryTests.java @@ -1372,6 +1372,72 @@ public void findFirst_subQuery_withSorting() { assertEquals("Bella", dog.getName()); } + @Test + public void findFirst_limit() { + realm.beginTransaction(); + + Owner owner1 = realm.createObject(Owner.class); + owner1.setName("Owner 1"); + + Owner owner2 = realm.createObject(Owner.class); + owner2.setName("Owner 2"); + + Owner owner3 = realm.createObject(Owner.class); + owner3.setName("Owner 3"); + + Owner owner4 = realm.createObject(Owner.class); + owner4.setName("Owner 4"); + + realm.commitTransaction(); + + RealmResults owners = realm.where(Owner.class).findFirst(2); + assertEquals(2, subQueryResult.size()); + } + + @Test + public void findLast_limit() { + realm.beginTransaction(); + + Owner owner1 = realm.createObject(Owner.class); + owner1.setName("Owner 1"); + + Owner owner2 = realm.createObject(Owner.class); + owner2.setName("Owner 2"); + + Owner owner3 = realm.createObject(Owner.class); + owner3.setName("Owner 3"); + + Owner owner4 = realm.createObject(Owner.class); + owner4.setName("Owner 4"); + + realm.commitTransaction(); + + RealmResults owners = realm.where(Owner.class).findLast(2); + assertEquals(2, subQueryResult.size()); + } + + @Test + public void findRandom_limit() { + realm.beginTransaction(); + + Owner owner1 = realm.createObject(Owner.class); + owner1.setName("Owner 1"); + + Owner owner2 = realm.createObject(Owner.class); + owner2.setName("Owner 2"); + + Owner owner3 = realm.createObject(Owner.class); + owner3.setName("Owner 3"); + + Owner owner4 = realm.createObject(Owner.class); + owner4.setName("Owner 4"); + + realm.commitTransaction(); + + RealmResults owners = realm.where(Owner.class).findRandom(2); + assertEquals(2, subQueryResult.size()); + } + @Test public void georgian() { String words[] = {"მონაცემთა ბაზა", "მიწისქვეშა გადასასვლელი", "რუსთაველის გამზირი", diff --git a/realm/realm-library/src/main/java/io/realm/RealmQuery.java b/realm/realm-library/src/main/java/io/realm/RealmQuery.java index 3f57236013..424b067d47 100644 --- a/realm/realm-library/src/main/java/io/realm/RealmQuery.java +++ b/realm/realm-library/src/main/java/io/realm/RealmQuery.java @@ -1765,6 +1765,56 @@ public long count() { return lazyFindAll().size(); } + /** + * Finds first n objects that fulfill the query conditions. + * + * @return a {@link io.realm.RealmResults} containing objects. If no objects match the condition, a list with zero + * objects is returned. + * @see io.realm.RealmResults + */ + @SuppressWarnings("unchecked") + public RealmResults findFirst(int limit) { + return limit(limit).findAll(); + } + + /** + * Finds last n objects that fulfill the query conditions. + * + * @return a {@link io.realm.RealmResults} containing objects. If no objects match the condition, a list with zero + * objects is returned. + * @see io.realm.RealmResults + */ + @SuppressWarnings("unchecked") + public RealmResults findLast(int limit) { + if (limit < 1) { + throw new IllegalArgumentException("Only positive numbers above 0 is allowed. Yours was: " + limit); + } + + RealmResults results = findAll(); + results = results.subList(Math.max(results.size() - limit, 0), results.size()); + Collections.reverse(results); + return results; + } + + /** + * Finds random n objects that fulfill the query conditions. + * + * @return a {@link io.realm.RealmResults} containing objects. If no objects match the condition, a list with zero + * objects is returned. + * @see io.realm.RealmResults + */ + @SuppressWarnings("unchecked") + public RealmResults findRandom(int limit) { + if (limit < 1) { + throw new IllegalArgumentException("Only positive numbers above 0 is allowed. Yours was: " + limit); + } + + RealmResults results = findAll(); + Collections.shuffle(results); + results = results.subList(0, Math.min(limit, results.size())); + return results; + } + /** * Finds all objects that fulfill the query conditions. *