带有Map字段的Java RealmObject

时间:2016-01-06 14:09:31

标签: java realm

我创建了扩展RealmObject的类。 并计划添加Map字段,如下所示,但我注意到Realm还不支持Map

public class SmsPattern extends RealmObject {
    @PrimaryKey
    private String id;
    @Required
    private String address;
    @Required
    private String regex;
    @Required
    private Map<Integer, Integer> regexGroup;
}

作为替代方案,我会将Map转换为Json String,并使用Json String代替Map

public class SmsPattern extends RealmObject {
    @PrimaryKey
    private String id;
    @Required
    private String address;
    @Required
    private String regex;
    @Required
    private String regexGroup;
    @Ignore
    private Map<Integer, Integer> regexGroupMap;

    public Map<Integer, Integer> getRegexGroupMap() {
        Type type = new TypeToken<Map<Integer, Integer>>(){}.getType();
        return new Gson().fromJson(getRegexGroup(), type);
    }

    public void setRegexGroupMap(Map<Integer, Integer> regexGroupMap) {
        setRegexGroup(new Gson().toJson(regexGroupMap));
    }
}

这是正常的解决方案吗? 或者更好的主意?

1 个答案:

答案 0 :(得分:1)

如果你想要一个行为类似于地图的类似RealmObject,你可以像这样自己申报一个:

public class RegexGroup extends RealmObject {
    @PrimaryKey
    private int key;
    private int value
}

public class SmsPattern extends RealmObject {
    @PrimaryKey
    private String id;
    @Required
    private String address;
    @Required
    private String regex;
    private RealmList<RegexGroup> regexGroup;
}

比JSON字符串解决方案更有优势

  1. RegexGroup.key已被编入索引,如果您想通过密钥从中查询一个,它会非常快。

  2. 您不必加载整个&#34;地图&#34;在使用JSON字符串时,就像你所拥有的那样(假设你没有使用流解析器)。

  3. @PrimaryKey保证您的RegexGroup.key具有唯一性,这使其更像地图。