需求:假设有一个对象AppRole,一个集合list<AppRole> list,一个集合list<AppRole>list1;
list为全量数据,list1中不是全量,比较两个集合,code相同,list1数据进行更新;
先上代码:
import com.bamboocloud.bpc.repo.entity.AppRole;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class test {
private static class Approle{
String code;
String id;
String state;
public Approle(String code, String id, String state) {
this.code = code;
this.id = id;
this.state = state;
}
public String getCode(){
return this.code;
}
public void setCode(String code) {
this.code = code;
}
public String getId(){
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getState(){
return this.state;
}
public void setState(String state) {
this.state = state;
}
}
public static void main(String[] args) {
List<Approle> list = new ArrayList<>();
list.add(new Approle("code1","1","0"));
list.add(new Approle("code2","2","0"));
list.add(new Approle("code3","3","0"));
List<Approle> list1 = new ArrayList<>();
list1.add(new Approle("code2","",""));
list1.add(new Approle("code3","",""));
Map<String, Approle> map = new TreeMap<>();
for (Approle updateAppRole : list1) {
map.put(updateAppRole.getCode(),updateAppRole);
}
for (Approle appRole : list) {
Approle role = map.getOrDefault(appRole.getCode(),null);
if(role== null){
continue;
}
role.setId(appRole.getId());
role.setState("1");
}
}
}
注意:绝对不能用两个list进行循环去比较,这是最慢的,因为他得比较n*m次,效率最低。
这里采用的是map,利用哈希减一层循环,然后在list循环中根据list的code获取list1的对象,
假如list1循环n次,list循环m次,这样总共的循环次数为n+m次,map的查询速度很快,时间可以忽略不看。
往map中存数据的时候此处用的是TreeMap,考虑到插入比hashMap快。(这块涉及到两个map的底层了,需要了解的自行可以看一看)。