У меня есть a java.util.Set<City> cities
и я должен добавить города к этому набору 2 способами:
Путем добавления отдельного города (с помощью cities.add(city)
вызов метода)
Путем добавления другого набора городов к этому набору (с помощью cities.addAll(anotherCitiesSet)
вызов метода)
Но проблема во втором подходе состоит в том, что я не знаю, были ли какие-либо дублирующиеся города в anotherCitiesSet
.
Я хочу сделать некоторую обработку каждый раз, когда дублирующуюся запись пробуют, чтобы быть введенной вcities
набор.
Скопируйте набор городов
(например, citiesCopy
), а затем вызовите citiesCopy.retainAll (anotherCitiesSet)
- получившийся набор в citiesCopy
будет содержать пересечение двух наборов, что позволит вам легко увидеть, какие города дублируются, если таковые имеются.
В качестве альтернативы можно выполнить цикл через второй набор и вручную добавить каждый из элементов, каждый раз проверяя возвращаемое значение из add ()
:
for(java.util.Set<City> c : anotherCitiesSet) {
if(!cities.add(c)) {
// c was a duplicate, do something?
}
}
Получите класс из java.util.Set, переопределите addAll, если возможно (если нет, создайте новый метод), добавьте элементы один за другим и выполните ваша пользовательская обработка, если вы обнаружите повторяющуюся запись.
Вам нужно будет проверить наличие дубликатов, прежде чем звонить 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
Перед вашим 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);