ArrayList частичная интеграция одного списка в другой

У меня есть функция, которая создает обычные объекты одного типа, и я не могу избежать этого шага. Когда я использую List.addAll(*), я получу много "Дубликатов", которые не равны в смысле объективности.

У меня очень плохо закодированное решение, и я хочу спросить, может ли быть лучшее или более эффективное решение, возможно, с функциями Java-Util и определением 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 ответ

Добавить функцию переопределения 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);
        }
    }
}
Другие вопросы по тегам