Проблема с вашим кодом не в методе removeDuplicates
. Вместо этого, вероятно, это метод equals в классе Road. List.contains(...)
использует этот метод equals для сравнения, содержит ли список данный элемент. Итак, чтобы ваш код работал должным образом, вы должны переопределить метод equals в классе Road, чтобы выполнить необходимое сравнение. В зависимости от реализации класса Road это может выглядеть, например, так:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Road road = (Road) o;
return Objects.equals(road.x, x) &&
Objects.equals(road.y, y) &&
Objects.equals(imgPath, road.imgPath) &&
Objects.equals(color, road.color);
}
@Override
public int hashCode() {
return Objects.hash(x, y, imgPath, color);
}
Как уже отмечалось в комментариях, эти методы обычно генерируются с использованием вашей IDE и корректируются только при необходимости. При их настройке вы должны учитывать, что существует контракт (который можно найти в документации) между равными и хэш-кодом, который необходимо учитывать по разным причинам (например, с использованием хэш-наборов).