New in version 10.6.0.
You can use the RealmSet data type to manage a collection of unique keys. RealmSet
implements Java's Set
interface, so it works just like the built-in HashSet
class, except managed RealmSet
instances persist their contents to a realm. RealmSet
instances that contain Realm objects actually only store references to those objects, so deleting a Realm object from a realm also deletes that object from any RealmSet
instances that contain the object.
Because RealmSet
implements RealmCollection
, it has some useful mathematical methods, such as sum
, min
, and max
. For a complete list of available RealmSet
methods, see: the RealmSet API reference.
You cannot use the following Realm
methods on objects that contain a field of type RealmSet
:
Realm.insert()
Realm.insertOrUpdate()
Realm.createAllFromJson()
Realm.createObjectFromJson()
Realm.createOrUpdateAllFromJson()
Realm.createOrUpdateObjectFromJson()
To create a field of type RealmSet
, define an object property of type RealmSet<E>
, where E
defines the keys you would like to store in your RealmSet
.
Add an object to a RealmSet
with RealmSet.add()
Add multiple objects with RealmSet.addAll()
Check if the set contains a specific object with RealmSet.contains()
Check if the set contains all of multiple objects with RealmSet.containsAll()
import io.realm.RealmObject;import io.realm.RealmSet;public class Frog extends RealmObject { String name; RealmSet<Snack> favoriteSnacks; public Frog() {} public String getName() { return name; } public void setName(String name) { this.name = name; } public RealmSet<Snack> getFavoriteSnacks() { return favoriteSnacks; } public void setFavoriteSnacks(RealmSet<Snack> favoriteSnacks) { this.favoriteSnacks = favoriteSnacks; }}
import io.realm.RealmObject;public class Snack extends RealmObject { private String name; public Snack() {} public String getName() { return name; } public void setName(String name) { this.name = name; }}
Frog frog = realm.createObject(Frog.class);frog.setName("George Washington");RealmSet<Snack> set = frog.getFavoriteSnacks();Snack flies = realm.createObject(Snack.class);flies.setName("flies");set.add(flies);Snack water = realm.createObject(Snack.class);water.setName("water");Snack verySmallRocks = realm.createObject(Snack.class);verySmallRocks.setName("verySmallRocks");set.addAll(Arrays.asList(water, verySmallRocks));Assert.assertTrue(set.contains(flies));Snack biscuits = realm.createObject(Snack.class);biscuits.setName("biscuits");Assert.assertTrue(set.containsAll(Arrays.asList(water, biscuits)) == false);set.remove(verySmallRocks);Assert.assertTrue(set.contains(verySmallRocks) == false);int sizeOfSetBeforeDelete = set.size();flies.deleteFromRealm();Assert.assertTrue(sizeOfSetBeforeDelete == set.size() + 1);
import io.realm.RealmObjectimport io.realm.RealmSetopen class Frog : RealmObject() { var name: String = "" var favoriteSnacks: RealmSet<Snack> = RealmSet<Snack>();}
import io.realm.RealmObjectopen class Snack : RealmObject() { var name: String? = null}
val frog = realm.createObject(Frog::class.java)frog.name = "Jonathan Livingston Applesauce"val set = frog.favoriteSnacksval flies = realm.createObject(Snack::class.java)flies.name = "flies"set.add(flies)val water = realm.createObject(Snack::class.java)water.name = "water"val verySmallRocks = realm.createObject(Snack::class.java)verySmallRocks.name = "verySmallRocks"set.addAll(listOf(water, verySmallRocks))Assert.assertTrue(set.contains(flies))val biscuits = realm.createObject(Snack::class.java)biscuits.name = "biscuits"Assert.assertTrue(set.containsAll(Arrays.asList(water, biscuits)) == false)set.remove(verySmallRocks)Assert.assertTrue(set.contains(verySmallRocks) == false)val sizeOfSetBeforeDelete = set.sizeflies.deleteFromRealm()Assert.assertTrue(sizeOfSetBeforeDelete == set.size + 1)
To subscribe to changes to a RealmSet
, pass a SetChangeListener implementation to the RealmSet.addChangeListener method. Your SetChangeListener
implementation must define an onChange()
method, which accepts a reference to the changed RealmSet
and a set of changes as parameters. You can access the number of items added to the set as well as the number of items removed from the set through the SetChangeSet
parameter.
AtomicReference<Frog> frog = new AtomicReference<Frog>();realm.executeTransaction(r -> { frog.set(realm.createObject(Frog.class)); frog.get().setName("Jonathan Livingston Applesauce");});SetChangeListener<Snack> setChangeListener = new SetChangeListener<Snack>() { @Override public void onChange(@NotNull RealmSet<Snack> set, SetChangeSet changes) { Log.v("EXAMPLE", "Set changed: " + changes.getNumberOfInsertions() + " new items, " + changes.getNumberOfDeletions() + " items removed."); }};frog.get().getFavoriteSnacks().addChangeListener(setChangeListener);realm.executeTransaction(r -> { RealmSet<Snack> set = frog.get().getFavoriteSnacks(); Snack flies = realm.createObject(Snack.class); flies.setName("flies"); set.add(flies); Snack water = realm.createObject(Snack.class); water.setName("water"); Snack verySmallRocks = realm.createObject(Snack.class); verySmallRocks.setName("verySmallRocks"); set.addAll(Arrays.asList(water, verySmallRocks));});
var frog :Frog? = nullrealm.executeTransaction { r: Realm? -> frog = realm.createObject(Frog::class.java) frog?.name = "Jonathan Livingston Applesauce"}val setChangeListener: SetChangeListener<Snack> = SetChangeListener<Snack> { set, changes -> Log.v("EXAMPLE", "Set changed: " + changes.numberOfInsertions + " new items, " + changes.numberOfDeletions + " items removed.")}frog?.favoriteSnacks?.addChangeListener(setChangeListener)realm.executeTransaction { r: Realm? -> val set = frog!!.favoriteSnacks val flies = realm.createObject(Snack::class.java) flies.name = "flies" set.add(flies) val water = realm.createObject(Snack::class.java) water.name = "water" val verySmallRocks = realm.createObject(Snack::class.java) verySmallRocks.name = "verySmallRocks" set.addAll(Arrays.asList(water, verySmallRocks))}
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4