Menu Docs
Página inicial do Docs
/ /
Tipos de dados

RealmSet - Java SDK

Novidade na versão 10.6.0.

Você pode utilizar o tipo de dadosRealmSet do para gerenciar uma coleção de chaves únicas. RealmSet implementa a interface Set do Java, portanto, funciona como a classe HashSet incorporada, exceto pelo fato de que as instâncias RealmSet gerenciadas persistem seu conteúdo em um Realm. As instâncias RealmSet que contêm objetos de Realm , na verdade, armazenam apenas referências a esses objetos, portanto, a exclusão de um Objeto de Realm de um Realm também exclui esse objeto de quaisquer instâncias RealmSet que contenham o objeto.

Como o RealmSet implementa RealmCollection, ele tem alguns métodos matemáticos úteis, como sum, min e max. Para obter uma lista completa dos métodos RealmSet disponíveis, consulte: a referência da API RealmSet.

Você não pode usar os seguintes métodos Realm em objetos que contêm um campo do tipo RealmSet:

  • Realm.insert()

  • Realm.insertOrUpdate()

  • Realm.createAllFromJson()

  • Realm.createObjectFromJson()

  • Realm.createOrUpdateAllFromJson()

  • Realm.createOrUpdateObjectFromJson()

Para criar um campo do tipo RealmSet, defina uma propriedade de objeto do tipo RealmSet<E>, onde E define as chaves que você deseja armazenar em seu RealmSet.

import io.realm.RealmObject;
import io.realm.RealmSet;
public class Frog extends RealmObject {
String name;
RealmSet<Snack> favoriteSnacks;
// realm-required empty constructor
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");
// get the RealmSet field from the object we just created
RealmSet<Snack> set = frog.getFavoriteSnacks();
// add value to the RealmSet
Snack flies = realm.createObject(Snack.class);
flies.setName("flies");
set.add(flies);
// add multiple values to the RealmSet
Snack water = realm.createObject(Snack.class);
water.setName("water");
Snack verySmallRocks = realm.createObject(Snack.class);
verySmallRocks.setName("verySmallRocks");
set.addAll(Arrays.asList(water, verySmallRocks));
// check for the presence of a key with contains
Assert.assertTrue(set.contains(flies));
// check for the presence of multiple keys with containsAll
Snack biscuits = realm.createObject(Snack.class);
biscuits.setName("biscuits");
Assert.assertTrue(set.containsAll(Arrays.asList(water, biscuits)) == false);
// remove string from a set
set.remove(verySmallRocks);
// set no longer contains that string
Assert.assertTrue(set.contains(verySmallRocks) == false);
// deleting a Realm object also removes it from any RealmSets
int sizeOfSetBeforeDelete = set.size();
flies.deleteFromRealm();
// deleting flies object reduced the size of the set by one
Assert.assertTrue(sizeOfSetBeforeDelete == set.size() + 1);
import io.realm.RealmObject
import io.realm.RealmSet
open class Frog
: RealmObject() {
var name: String = ""
var favoriteSnacks: RealmSet<Snack> = RealmSet<Snack>();
}
import io.realm.RealmObject
open class Snack : RealmObject() {
var name: String? = null
}
val frog = realm.createObject(Frog::class.java)
frog.name = "Jonathan Livingston Applesauce"
// get the RealmSet field from the object we just created
val set = frog.favoriteSnacks
// add value to the RealmSet
val flies = realm.createObject(Snack::class.java)
flies.name = "flies"
set.add(flies)
// add multiple values to the RealmSet
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))
// check for the presence of a key with contains
Assert.assertTrue(set.contains(flies))
// check for the presence of multiple keys with containsAll
val biscuits = realm.createObject(Snack::class.java)
biscuits.name = "biscuits"
Assert.assertTrue(set.containsAll(Arrays.asList(water, biscuits)) == false)
// remove string from a set
set.remove(verySmallRocks)
// set no longer contains that string
Assert.assertTrue(set.contains(verySmallRocks) == false)
// deleting a Realm object also removes it from any RealmSets
val sizeOfSetBeforeDelete = set.size
flies.deleteFromRealm()
// deleting flies object reduced the size of the set by one
Assert.assertTrue(sizeOfSetBeforeDelete == set.size + 1)

Para assinar as alterações em um RealmSet, passe uma implementação SetChangeListener para o RealmSet.addChangeListener método. Sua implementação SetChangeListener deve definir um método onChange() , que aceita uma referência ao RealmSet alterado e um conjunto de alterações como parâmetros. Você pode acessar o número de itens adicionados ao conjunto, bem como o número de itens removidos do conjunto por meio do parâmetro SetChangeSet .

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 -> {
// get the RealmSet field from the object we just created
RealmSet<Snack> set = frog.get().getFavoriteSnacks();
// add value to the RealmSet
Snack flies = realm.createObject(Snack.class);
flies.setName("flies");
set.add(flies);
// add multiple values to the RealmSet
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? = null
realm.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? ->
// get the RealmSet field from the object we just created
val set = frog!!.favoriteSnacks
// add value to the RealmSet
val flies = realm.createObject(Snack::class.java)
flies.name = "flies"
set.add(flies)
// add multiple values to the RealmSet
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))
}

Voltar

Dicionários

Nesta página