В других ответах уже указывалось, что вы не можете и не должны думать об использовании Object.equals
для этого. Одним из решений является использование пользовательского метода, возвращающего логический массив, но вы также можете посмотреть EnumSets:
enum DigimonEquality {
NAME, HP, ATTACK;
}
public class Digimon {
private String name;
private int hitPoints;
private double attackSpeed;
public Digimon(String name, int hitPoints, double attackSpeed) {
super();
this.name = name;
this.hitPoints = hitPoints;
this.attackSpeed = attackSpeed;
}
public EnumSet<DigimonEquality> checkEquality(Digimon that) {
EnumSet<DigimonEquality> result = EnumSet.noneOf(DigimonEquality.class);
if (this.name.equals(that.name))
result.add(DigimonEquality.NAME);
// etc.
return result;
}
public static void main(String[] args) {
List<Digimon> digimon = new ArrayList<>();
Digimon gatamon = new Digimon("Gatamon", 500, 12.9);
digimon.add(gatamon);
Digimon agumon = new Digimon("agumon", 53, 9.8);// agumon
digimon.add(gatamon);
Digimon agumon1 = new Digimon("agumon", 53, 9.8);// agumon1
digimon.add(gatamon);
EnumSet<DigimonEquality> equality = agumon.checkEquality(agumon1);
System.out.println(
Arrays.stream(DigimonEquality.values()).map(equality::contains).collect(Collectors.toList()));
}
}
Пользовательский метод также может принимать только Digimon
st, который вам не нужно проверять / приводить тип, как в методе equals.
EDIT: поскольку OP борется с реализацией equals, и, возможно, люди, плохо знакомые с Java, читают это, я хочу добавить, что вы должны c также переопределить hashCode
при переопределении equals