我有3个用于定义唯一对象的字段,例如:region,name,platform是字符串值。 必须将此类对象的列表与此类对象的另一列表进行比较。我正在考虑为此创建一个对象,例如
Class myObject{
private String region;
private String name;
private String platform;
}
然后创建它们的列表以比较两个列表中的每个对象。有人请为我提供更好的解决方案。
我有两个表,包括列,id,区域,平台,名称,区域,计数等,并且值在此表中重复。另一个表有id,region,platform,name zone。第一个表给出了保留的AWS EC2实例列表,第二个表列出了现在运行的AWS EC2实例列表。我需要找出所有保留的实例当前是否正在运行还是有任何未使用的实例。
任何人都可以为这个问题提出一个好的解决方案。
答案 0 :(得分:1)
您需要使用equals()
和hashCode()
方法扩展您的班级定义。
请参阅以下文章:Equality on artima.com& Java Equals & HashCode on ideyatech.com。谷歌还有更多。
然后,您可以使用Set
或使用equals
遍历列表作为测试,以帮助生成唯一对象的集合。
答案 1 :(得分:0)
要检查两个对象是否相等,您需要覆盖equals()
并且还应覆盖hashCode()
。可以找到更多详细信息:here
以下是一个示例课MyClazz
,其中包含测试MyClazzTest
,可帮助您了解:
MyClazz
package com.my.test;
public class MyClazz {
private String region;
private String name;
private String platform;
public MyClazz(String region, String name, String platform) {
this.region = region;
this.name = name;
this.platform = platform;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result
+ ((platform == null) ? 0 : platform.hashCode());
result = prime * result + ((region == null) ? 0 : region.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MyClazz other = (MyClazz) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (platform == null) {
if (other.platform != null)
return false;
} else if (!platform.equals(other.platform))
return false;
if (region == null) {
if (other.region != null)
return false;
} else if (!region.equals(other.region))
return false;
return true;
}
}
MyClazzTest
package com.my.test;
import org.junit.Assert;
import org.junit.Test;
public class MyClazzTest {
@Test
public void equalObject() {
MyClazz object = new MyClazz("UK", "Chris", "Window");
MyClazz duplicateObject = new MyClazz("UK", "Chris", "Window");
Assert.assertTrue(object.equals(duplicateObject));
}
@Test
public void notEqualObject() {
MyClazz object = new MyClazz("UK", "Chris", "Window");
MyClazz differentObject = new MyClazz("US", "Chris", "Window");
Assert.assertFalse(object.equals(differentObject));
}
}
答案 2 :(得分:0)
编辑问题: