我有两个相同类的对象(包含对象列表)。我需要找到两者是否相同。
请考虑以下示例:
class Device {
String deviceName;
String devLocation;
String devType;
String devID;
public String getDeviceName() {
return deviceName;
}
public void setDeviceName(String deviceName) {
this.deviceName = deviceName;
}
public String getDevLocation() {
return devLocation;
}
public void setDevLocation(String devLocation) {
this.devLocation = devLocation;
}
public String getDevType() {
return devType;
}
public void setDevType(String devType) {
this.devType = devType;
}
public String getDevId() {
return devID;
}
public void setDevId(String devId) {
this.devID = devId;
}
}
class DevList {
List<Device> deviceList;
public List<Device> getDevices() {
return deviceList;
}
public void setDevices(List<Device> deviceList) {
this.deviceList = deviceList;
}
}
需要比较DevList类的两个对象。
每隔一段时间就会得到一个新的DevList对象。
每当我需要使用上一个对象验证当前对象时,如果存在任何差异则更新数据库,否则忽略。
当前和先前对象中的列表(deviceList)可能不是相同的顺序。
例如:
考虑下面两个Json格式的对象(请忽略json格式错误)。
对象1:
{
"devList":[
{
"deviceName":"ABC",
"devLocation":"India",
"devType":"Router",
"devID":"1111"
},
{
"deviceName":"XYZ",
"devLocation":"India",
"devType":"Router",
"devID":"2222"
}
]
}
对象2:
{
"devList":[
{
"deviceName":"XYZ",
"devLocation":"India",
"devType":"Router",
"devID":"2222"
},
{
"deviceName":"ABC",
"devLocation":"India",
"devType":"Router",
"devID":"1111"
}
]
}
我们可以通过检查devID来迭代两个对象中的列表。但复杂性将是M * N.
还有其他办法吗?
答案 0 :(得分:0)
您可以覆盖equals
中的Device
来比较每个Device
对象。
类似的东西
class Device {
...
...
//your getter and setter
public boolean equals (Object obj)
{
if (Device.class != obj.getClass()) {
return false;
}
if (obj instanceof Device) {
return (deviceName.equals(((Device) obj).deviceName) &&
devLocation.equals(((Device) obj).devLocation) &&
devType.equals(((Device) obj).devType) &&
devID.equals(((Device) obj).devID));
}
return false;
}
}
现在,请致电 removeAll
,这将从List1
删除相同的对象列表
List1.equals(List2);
因此,如果两个列表都有相同的对象列表,那么List1
将为空。
答案 1 :(得分:0)
步骤1:首先覆盖设备类中的等于方法 第2步:覆盖DevList类中的equal() 以下逻辑 1.使用一个Set集合 2.从第一个对象的列表中添加对象 3.检查set的size() 3.从第二个对象的列表中添加对象 5.每次从第二个列表添加时检查set的size() 6.如果超过一个列表的大小则不相等( As Set不会保留重复值)