所以我有一个界面。
=IFERROR(SMALL($CX$2:$DC$11,COLUMNS($CX:CX)),"")
和
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}
我的PFRecord列表包含重复的结果。我必须使用可以检查ACompId包含密钥的哈希映射。如果密钥已存在,请不要将其传递给recs.addAll。我该怎么做呢?任何帮助表示赞赏
更新:我尝试了Set,但仍然在模型类中看到HashCode()和equals()的重复结果。
List<APPPRecord> PFRecord = null;
while(scroll.next()){
APPPRecord item = (APPPRecord) scroll.get(0);
List<ARecord> recs = new ArrayList<ARecord>();
recs.addAll(PFRecord);
还尝试了hashMaps。
for(ARecord records:recs){
uniqueRecs.put(records.getACompId(), records);
Set<String> keys = uniqueRecs.keySet();
for(String key: keys){
log.debug("keys " + key);
}
}
它们都仍会产生重复的结果。有任何想法吗?
答案 0 :(得分:0)
替换List<ARecord> recs = new ArrayList<ARecord>();
Set<ARecord> recs = new HashSet<ARecord>();
并确保ARecord
的实施正确实施hashcode
/ equals
方法,以便您的设置仅包含 distinct 实例。
答案 1 :(得分:0)
使用HashMap<K,V>
课程,此document会为您提供所需的API。
根据您的要求,您可以使用.containsKey(Object key)
方法检查密钥是否已存在。
更新:我建议这样做是因为您要求HashMap
,如果重复是您唯一的问题,那么您可以在列表上使用.contains(Object o)
方法有原地。接口List<>
提供此方法,该方法根据值的存在返回boolean
值。