我有一个创建相同类型的常规对象的函数,我无法避免这一步。 当我使用List.addAll(*)时,我会得到许多"重复"在客观性方面不相同。
我有一个非常糟糕的编码解决方案,并且想问一下是否可能有更好或更有效的Java-Util函数并为该单个intermezzo定义一个Comparator?
这是我的难闻气味:
private void addPartial(List<SeMo_WikiArticle> allnewWiki, List<SeMo_WikiArticle> newWiki) {
if(allnewWiki.isEmpty())
allnewWiki.addAll(newWiki);
else{
for(SeMo_WikiArticle nn : newWiki){
boolean allreadyIn = false;
for(SeMo_WikiArticle oo : allnewWiki){
if(nn.getID()==oo.getID())
allreadyIn= true;
}
if(!allreadyIn)
allnewWiki.add(nn);
}
}
}
任何想法?
答案 0 :(得分:0)
将equals()
的覆盖功能添加到class SeMo_WikiArticle
:
class SeMo_WikiArticle {
// assuming this class has two properties below
int id;
String name;
SeMo_WikiArticle(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object obj) {
// implement your own comparison policy
// here is an example
if (obj instanceof SeMo_WikiArticle) {
SeMo_WikiArticle sw = (SeMo_WikiArticle)obj;
if (this.id == sw.id && (this.name == sw.name || this.name.equals(sw.name))) {
return true;
}
}
return false;
}
}
之后,您可以使用contains()
判断该列表是否已包含SeMo_WikiArticle
的特定对象。
以下是代码:
private void addPartial(List<SeMo_WikiArticle> allnewWiki, List<SeMo_WikiArticle> newWiki) {
for (SeMo_WikiArticle sw : newWiki) {
if (!allnewWiki.contains(sw)) {
allnewWiki.add(sw);
}
}
}