Я думаю, что вам действительно нужно (по крайней мере) HashMap<Car, List<PurchaseOffer>>
... как предложено @ Andreas_D
Ваше возражение о том, что у каждого Car
уже есть List<PurchaseOffer>
, не относится к делу.Список в HashMap
представляет собой сводный список, содержащий все PurchaseOffer
объектов из всех Car
объектов, которые обозначают одну и ту же физическую машину.
Точка создания новогоlist, чтобы избежать изменения оригинальных списков на исходных Car
объектах.(Если это не имеет значения, то вы можете выбрать один экземпляр Car
из набора, который представляет физический автомобиль, и объединить объекты PurchaseOffer
из других в этот список.)
I 'Я не совсем уверен, почему @duffymo предложил двунаправленную карту между ними, но я думаю, это потому, что разные Car
объекты из разных источников могут иметь дополнительную (или противоречивую) информацию для одного и того же физического автомобиля.Сохраняя все экземпляры, вы избегаете отбрасывания информации.(Еще раз, если вы счастливы отказаться от видоизменения и / или отменить информацию, вы можете попытаться объединить информацию о каждом отдельном автомобиле в один Car
объект.
Если вы действительно этого не сделалиЕсли бы вы не заботились о сохранении информации и были готовы слиться с вещами, то, вероятно, сработал бы следующий подход:
HashMap<Car, Car> map = new HashMap<Car, Car>(...);
for (Car car : carsToBeAggregated) {
Car master = nap.get(car);
if (master == null) {
map.put(car, car);
} else {
master.offers.addAll(car.offers);
// optionally, merge other Car information from car to master
}
}
Вы НЕ должны пытаться использовать Car.hashCode()
в качестве ключа для чего-либоЗначения хеш-кода не являются уникальными идентификаторами: существует определенная вероятность того, что две разные машины получат одно и то же значение хэш-кода. Если вы попытаетесь использовать их так, как если бы они были уникальными идентификаторами, у вас возникнут проблемы ...