我有一個本地存儲中的用戶列表,我需要每隔一段時間從遠程用戶列表更新一次。基本上:從另一個列表更新列表
- 如果遠程用戶本地已存在,請更新其字段。
- 如果遠程用戶本地不存在,請添加該用戶。
- 如果本地用戶未出現在遠程列表中,請停用或刪除。
- 如果本地用戶也出現在遠程列表中,請更新其字段。 (與1相同)
例如, 遠程列表:用戶(1,真),用戶(2,真),用戶(4,真),用戶(5,真)
本地列表:用戶(1,true),用戶),User(3,true),User(6,true)
新本地列表:User(1,true),User(2,true),User(3,false),User(4,true) ,User(5,true),User(6,false),
只是一個簡單的同步本地列表的情況。有沒有更好的方式在純Java中做到這一點比以下更好?我感到很看重我自己的代碼。
public class User {
Integer id;
String email;
boolean active;
//Getters and Setters.......
public User(Integer id, String email, boolean active) {
this.id = id;
this.email = email;
this.active = active;
}
@Override
public boolean equals(Object other) {
boolean result = false;
if (other instanceof User) {
User that = (User) other;
result = (this.getId() == that.getId());
}
return result;
}
}
public static void main(String[] args) {
//From 3rd party
List<User> remoteUsers = getRemoteUsers();
//From Local store
List<User> localUsers =getLocalUsers();
for (User remoteUser : remoteUsers) {
boolean found = false;
for (User localUser : localUsers) {
if (remoteUser.equals(localUser)) {
found = true;
localUser.setActive(remoteUser.isActive());
localUser.setEmail(remoteUser.getEmail());
//update
}
break;
}
if (!found) {
User user = new User(remoteUser.getId(), remoteUser.getEmail(), remoteUser.isActive());
//Save
}
}
for(User localUser : localUsers) {
boolean found = false;
for(User remoteUser : remoteUsers) {
if(localUser.equals(remoteUser)) {
found = true;
localUser.setActive(remoteUser.isActive());
localUser.setEmail(remoteUser.getEmail());
//Update
}
break;
}
if(!found) {
localUser.setActive(false);
// Deactivate
}
}
}
1和4只能做一次,它們是相同的東西 – Lombo
你可以提取一些方法(比如在用戶類中的'update(User user)',它將'user'的字段設置爲'this ')。你也可以在內部使用'java.util.Collections.binarySearch(list,user)'來理解。 – incarnate