我创建了扩展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));
}
}
这是正常的解决方案吗? 或者更好的主意?
答案 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字符串解决方案更有优势
RegexGroup.key
已被编入索引,如果您想通过密钥从中查询一个,它会非常快。
您不必加载整个&#34;地图&#34;在使用JSON字符串时,就像你所拥有的那样(假设你没有使用流解析器)。
@PrimaryKey
保证您的RegexGroup.key
具有唯一性,这使其更像地图。