我收到了一些我从设备上获取的联系人列表,例如:
public class Contact{
String id;
List<String> phones;
// rest of the stuff
}
我想根据他们的ID&amp; amp;为我所有的联系人创建一个校验和。手机,所以如果我的联系方式有所改变,我可以在将来进行比较。我如何以更优雅和更好的方式在Android中实现这一目标?
答案 0 :(得分:0)
一种简单但丑陋的方法是覆盖Contact类的toString()方法,并根据其属性组合一些唯一值。比如这样。
StringBuilder builder = new StringBuilder();
char separator = ';';
for(String phone : phones){
builder.append(phone.hashCode()).append(separator);
}
builder.append(id.hashCode());
String uniqueValue = builder.toString();
然后在创建或加载Contact之后,将其toString()值返回的值保存到某个缓存中。一旦你想知道它是否改变了,再次调用toString()并将返回的值与缓存的值进行比较。如果相等,它就不会改变,如果没有改变的话。
更好的方法是在所有setter和getter中使用标志。
public class SomeClass{
private String id;
private boolean hasChanges;
public void setId(String pId){
this.id = pId;
hasChanges = true;
}
public boolean hasChanges(){
return this.hasChanges;
}
public void commit(){
hasChanges = false;
}
}
但是对于具有集合或数组类型的属性使用它是一个痛苦的屁股。因为您不需要为列表创建getter和setter,而是需要映射自己的添加和删除方法。因此它是一种不错而有效的方式。一旦您接受当前版本为有效,您可以调用commit()以查看它是否从此状态更改。