Android Unique CheckSum基于对象列表

时间:2018-03-21 18:55:55

标签: java android

我收到了一些我从设备上获取的联系人列表,例如:

public class Contact{
  String id;
  List<String> phones;

  // rest of the stuff
}

我想根据他们的ID&amp; amp;为我所有的联系人创建一个校验和。手机,所以如果我的联系方式有所改变,我可以在将来进行比较。我如何以更优雅和更好的方式在Android中实现这一目标?

1 个答案:

答案 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()以查看它是否从此状态更改。