Проблема в java.util. Set.addAll () метод

У меня есть a java.util.Set<City> cities и я должен добавить города к этому набору 2 способами:

  • Путем добавления отдельного города (с помощью cities.add(city) вызов метода)

  • Путем добавления другого набора городов к этому набору (с помощью cities.addAll(anotherCitiesSet) вызов метода)

Но проблема во втором подходе состоит в том, что я не знаю, были ли какие-либо дублирующиеся города в anotherCitiesSet.

Я хочу сделать некоторую обработку каждый раз, когда дублирующуюся запись пробуют, чтобы быть введенной вcities набор.

5
задан Joachim Sauer 16 April 2010 в 12:41
поделиться

4 ответа

Скопируйте набор городов (например, citiesCopy ), а затем вызовите citiesCopy.retainAll (anotherCitiesSet) - получившийся набор в citiesCopy будет содержать пересечение двух наборов, что позволит вам легко увидеть, какие города дублируются, если таковые имеются.

В качестве альтернативы можно выполнить цикл через второй набор и вручную добавить каждый из элементов, каждый раз проверяя возвращаемое значение из add () :

for(java.util.Set<City> c : anotherCitiesSet) {
    if(!cities.add(c)) {
        // c was a duplicate, do something?
    }
}
10
ответ дан 18 December 2019 в 11:54
поделиться

Получите класс из java.util.Set, переопределите addAll, если возможно (если нет, создайте новый метод), добавьте элементы один за другим и выполните ваша пользовательская обработка, если вы обнаружите повторяющуюся запись.

2
ответ дан 18 December 2019 в 11:54
поделиться

Вам нужно будет проверить наличие дубликатов, прежде чем звонить addAll :

Set<City> cities = getCities();
Set<City> otherCities = getOtherSetOfCities();
Set<City> duplicates = new HashSet<City>(otherCities);
duplicates.retainAll(cities);
// now duplicates contains all City objects that are in otherCities and cities
1
ответ дан 18 December 2019 в 11:54
поделиться

Перед вашим city.addAll () выполните:

Set<City> intersection = new HashSet<City>(cities);
cities.retainAll(anotherCitiesSet);

// Process all the items in the intersection, these are your duplicates
...

cities.addAll(anotherCitiesSet);
0
ответ дан 18 December 2019 в 11:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: