ArrayList将一个List部分集成到另一个List中

时间:2014-09-28 16:22:58

标签: arraylist insert comparator

我有一个创建相同类型的常规对象的函数,我无法避免这一步。 当我使用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);
        }
    }

}

任何想法?

1 个答案:

答案 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);
        }
    }
}