所以我有一个界面。
public interface ARecord {
public BigInteger getAutoID();
public String getACompId();
}
和
public class APPPRecord extends AbstratAPRecord implements ARecord{
private BigInteger autoID;
private String ACompId = null;
//setter and getter
@Override
public int hashCode() {
return this.getACompId().hashCode();
}
@Override
public boolean equals(Object obj) {
APPPRecord e = null;
if(obj instanceof APPPRecord){
e = (APPPRecord) obj;
}
if(this.getACompId().equals(e.getACompId())){
return true;
}
else {
return false;
}
}
}
在使用中,
List<APPPRecord> PFRecord = null;
while(scroll.next()) {
APPPRecord item = (APPPRecord) scroll.get(0);
List<ARecord> recs = new ArrayList<ARecord>();
recs.addAll(PFRecord);
我的PFRecord列表包含重复的结果。我必须使用可以检查ACompId包含密钥的哈希映射。如果密钥已存在,请不要将其传递给recs.addAll。我该怎么做呢?任何帮助表示赞赏
我尝试使用Set,仍然在我的模型类中看到HashCode()和equals()实现的重复结果。
for (ARecord records:recs){
uniqueRecs.put(records.getACompId(), records);
Set<String> keys = uniqueRecs.keySet();
for(String key: keys){
log.debug("keys " + key);
}
}
还尝试了hashMaps。
HashMap<String, ARecord > uniqueRecs = new HashMap<String, ARecord >();
for(ARecord records:recs){
if(!uniqueRecs.containsKey(records.getACompId())){
uniqueRecs.put(records.getACompId(), records);
for (String key : uniqueRecs.keySet()) {
log.debug("unique record " + key);
}
}
}
它们都仍会产生重复的结果。有任何想法吗?我没有想法忽略重复。