Search code examples
javaandroidrealm

Realm ORM: how to deal with Maps?


I am creating an Android app and I need to persist a Map<String,MyClass>. I've just started to use Realm ORM, as it supports one-to-one and one-to-many, enumerations and lists. I also found a workaround for lists of strings (i.e. I have to create a StringWrapper class encapsulating a string. However, from the documentation I understand there is no easy way like RealmMap, as it happens for lists. So, I'm looking for the best way to persist a map. My current idea is to replace my map with a list of objects KeyValueObject encapsulating a String (the former map key) and a MyClass. Similarly to Map.Entry. Is there any other solution that does not need me to rework the domain model for technology reasons?


Solution

  • As you notice, Realm doesn't yet support maps: https://github.com/realm/realm-java/issues/759

    You could use the model classes:

    class MyData extends RealmObject {
        private RealmList<MyMapEntry> myMap;
    }
    
    class MyMapEntry extends RealmObject {
        private String key;
        private MyClass value;
    }
    

    Say you have a MyData object called myData and you wish to fetch the value associated with myKey, the query MyClass myClass = myData.getMyMap().where().equalTo("key", myKey).firstFirst() might be useful.