在实际开发中,需要对比两个json文件,两个文件中可能有相同的数据,也可能有不同的数据,去掉两个文件中相同的数据,将第一个文件的数据标记为del,第二个文件的数据标记为add,并用csv文件进行保存。
1.removeAll()
List<RdsSO> beginRdsList = jsonToList(InJsonPath + File.separator + "DCI-" +date1 + "003000.json");
List<RdsSO> endRdsList = jsonToList(InJsonPath + File.separator + "DCI-" + date2 + "003000.json");
//对两个list中重复的数据进行去重,只留下不同的数据
List<RdsSO> beginRdsList1 = new ArrayList<RdsSO>();
List<RdsSO> endRdsList1 = new ArrayList<RdsSO>();
beginRdsList1.addAll(beginRdsList);
beginRdsList1.removeAll(endRdsList);
endRdsList1.addAll(endRdsList);
endRdsList1.removeAll(beginRdsList);
其中,jsonToList是我自己定义的一个方法,就是读取json文件并对对象进行赋值,存储到List中。
此时,我们需要对RdsSo实体类中的equals()和hashCode()方法进行重写,这样可以根据你的需求属性对对象进行去重。beginRdsList1和endRdsList1就是我们去重后的数据。
在本文中,是根据id属性进行去重的,只要id一致,就可以看作是一个对象。
public class RdsSO implements Serializable {
private String id;
private String operType;
private String vpnType;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getOperType() {
return operType;
}
public void setOperType(String operType) {
this.operType = operType;
}
public String getVpnType() {
return vpnType;
}
public void setVpnType(String vpnType) {
this.vpnType = vpnType;
}
public RdsSO(){
}
public RdsSO(String id, String operType, String vpnType) {
this.id = id;
}
@Override
public int hashCode(){
String result = id;
return result.hashCode();
}
@Override
public boolean equals(Object obj){
RdsSO rdsSO =(RdsSO)obj;
return this.getId().equals(rdsSO.getId() );
}
}
2.retaiAll()
与上面的类似,不过结果集List留下的是两个集合重复的数据。