У меня есть объект, у которого есть пара полей - как вы можете видеть, метод hashcode и equals реализован только с учетом идентификатора:
public class SpotResponse{
String id;
// bla bla other fields
public SpotResponse() {
}
public SpotResponse(@NonNull String id) {
this.id = id;
}
public String getId() {
return id;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SpotResponse that = (SpotResponse) o;
return id == that.id;
}
@Override
public int hashCode() {
return id.hashCode();
}
}
У меня есть метод, который проверяет, если Collection<SpotResponse> newSpots
содержит oldSpot
с HashMap<String, SpotResponse> spots = new HashMap<>();
Если я сделаю это:
List<String> newKeys = new ArrayList<>();
for (SpotResponse response : newSpots) {
newKeys.add(response.getId());
}
for (SpotResponse oldSpot : spots.values()) {
if (newKeys.contains(oldSpot.getId())) {
continue;
}
/* blabla */
}
newKeys.contains () возвращает true правильно, но если вместо этого я делаю
newSpots.contains(oldSpot)
Он всегда возвращает ложь. В этом случае коллекция представляет собой ArrayList (если это поможет)