Collections - SDK Java
Nesta página
Uma coleção Realm é um objeto que contém zero ou mais instâncias de um tipo . Coleções reais são uniformes, ou seja, todos os objetos em uma coleção são do mesmo tipo.
Você pode filtrar e classificar qualquer coleção usando o mecanismo de query do Realm. As coleções estão ativas, então elas sempre refletem o estado atual da instância do reino na thread atual. Você também pode ouvir as alterações na coleção assinando as notificações da coleção.
O Realm tem dois tipos de collection: listas e resultados.
Listas
Os Objeto de Realm podem conter listas de tipos de dados que não são Objeto de Realm. Você pode modelar essas collection com o tipo RealmList<T>
, onde T
pode ser dos seguintes tipos:
String
Integer
UUID
ObjectId
Boolean
Float
Double
Short
Long
Byte
byte[]
Date
Veja também:
Listar coleções
Uma collection representa um relacionamento entre dois tipos de Realm. As listas são mutáveis: dentro de uma transação de escrita, você pode adicionar e remover elementos de uma lista. As listas não estão associadas a uma query.
Coleções de resultados
Uma collection de resultados representa os resultados avaliados de forma preguiçosa de uma operação de query. Os resultados são imutáveis: você não pode adicionar ou remover elementos na collection de resultados. Os resultados têm uma query associada que determina seu conteúdo.
A classe RealmResults herda de AbstractList e se comporta de maneira semelhante. Por exemplo, RealmResults
são ordenados e você pode acessar os objetos individuais por meio de um índice. Se uma query não tiver correspondências, o objeto RealmResults
retornado será uma lista de comprimento 0, não uma referência de objeto null
.
Você só pode modificar ou excluir objetos em um conjunto RealmResults
em uma transação de escrita.
Iteração
Como as coleções do Realm estão ativas, os objetos podem se mover à medida que você itera sobre uma coleção. Você pode usar snapshots para iterar coleções com segurança.
Adaptadores
O Realm oferece adaptadores para ajudar a vincular dados a widgets padrão da interface do usuário. Essas classes funcionam com qualquer classe que implemente a interface OrderedRealmCollection
, que inclui as classes RealmResults
e RealmList
integradas. Para obter mais informações sobre adaptadores, consulte a documentação sobre Exibição de collection.
Importante
Os adaptadores exigem objetos gerenciados
Os adaptadores de Realm aceitam apenas instâncias de Objeto de Realm managed vinculadas a uma instância de um Realm. Para exibir objetos não gerenciados, use o Android de uso geral RecyclerView.Adapter
para visualizações de coletores ou ArrayAdapter
para visualizações de lista.
As coleções estão ativas
Como os objetos ativos, as collections do Realm geralmente são ativas:
Coleções de resultados em tempo real sempre refletem os resultados atuais da query associada.
Listas ativas sempre refletem o estado atual do relacionamento na instância de domínio.
Há três casos em que uma collection não está ativa:
A collection não é gerenciada, por exemplo, uma propriedade List de um Objeto de Realm que ainda não foi adicionado a um Realm ou que foi copiado de um Realm.
A coleção está congelada.
A collection faz parte de um snapshot.
Combinadas com notificações de coleção, as coleções dinâmicas permitem código limpo e reativo. Por exemplo, suponha que sua visualização exiba os resultados de uma query. Você pode manter uma referência à coleção de resultados em sua classe de exibição e, em seguida, ler a coleção de resultados conforme necessário sem precisar atualizá-la ou validar se ela está atualizada.
Aviso
Os índices podem mudar
Os resultados se atualizam automaticamente. Se você armazenar o índice posicional de um objeto em uma coleção ou a contagem de objetos em uma coleção, o índice armazenado ou o valor de contagem poderá estar desatualizado no momento em que você o usar.
Os resultados são avaliados preguiçosamente
O Realm só realiza uma query quando você realmente solicita os resultados dessa query, por exemplo, acessando elementos da coleção de resultados. Com essa avaliação preguiçosa, você consegue escrever um código elegante e de alto desempenho para lidar com grandes conjuntos de dados e queries complexas.
Limitando resultados da consulta
Como resultado da avaliação preguiçosa, você não precisa de nenhum mecanismo especial para limitar os resultados da consulta com o Realm. Por exemplo, se a sua consulta corresponder a milhares de objetos, mas você quiser carregar somente os dez primeiros, basta acessar somente os dez primeiros elementos da collection de resultados.
Paginação
Graças à avaliação preguiçosa, a tarefa comum da paginação se torna bastante simples. Por exemplo, suponha que você tenha uma coleção de resultados associada a uma consulta que corresponda a milhares de objetos em seu domínio. Você exibe cem objetos por página. Para avançar para qualquer página, basta acessar os elementos da coleta de resultados começando pelo índice que corresponde à página de destino.
Lista versus resultados
Quando precisar de uma collection, você pode usar a seguinte regra geral para determinar se uma lista ou uma collection de resultados é apropriada:
Ao definir as propriedade dos seu objeto de Realm, use as listas para definir relacionamento para muitos, exceto relacionamento inversas implícitas.
Use os resultados em qualquer outro lugar.
Para entender esses diferentes casos de uso, considere se você deve ser capaz de adicionar ou remover objetos diretamente. As listas permitem que você adicione e remova objetos diretamente, pois você controla os relacionamentos. As collection de resultados não permitem que você adicione ou remova objeto diretamente, pois seu conteúdo é determinado por uma query.
Exemplo
Considere um tipo de Realm chamado Person com um campo chamado emails
que é uma coleção de strings que representam endereços de e-mail. Você controla esses dados. Seu aplicativo precisa adicionar e remover endereços de e-mail das suas instâncias de Pessoa. Portanto, use uma lista para definir o tipo de campo de emails
.
Por outro lado, quando você faz query no domínio para todas as pessoas com mais de 25 anos, não faria sentido para você adicionar ou remover pessoas diretamente à coleção resultante. O conteúdo dessa coleção só muda quando a query corresponde a um conjunto diferente de Persons. Portanto, o Realm fornece uma collection de resultados .
Observação
Relacionamento um-para-muitos inversos
Como o Realm determina automaticamente o conteúdo das collections de relacionamento inverso implícito , você não pode adicionar ou remover objetos de tal collection. Portanto, o tipo de propriedade de relationship um-para-muitos é, na verdade, uma collection de resultados, não uma lista.