Ich habe eine Sammlung coll von myObject. Ich möchte nur dann ein Element zu coll hinzufügen, wenn es kein solches Element in der Sammlung gibt.
Ich habe die equals-Methode von myObject überschrieben. Es prüft auf die Gleichheit seiner 20 Attribute.
Aber im Falle der Sammlung würde ich gerne die Gleichheitsprüfung (und damit das Hinzufügen) basierend nur auf einem dieser Attribute vornehmen.
Vielleicht ist meine Architektur fehlerhaft, und ich sollte nicht zwei Gleichheitsdefinitionen haben und stattdessen zwei verschiedene Objekte haben.
Aber ist es möglich, ohne zu viel Refactoring von hier aus das zu erreichen, was ich will? Das heißt, ich hätte gerne eine Art Set-Sammlung, in der ich sagen könnte, wie man die Vergleichsprüfung durchführt. Dies wäre vergleichbar mit der Collection.sort () -Methode, bei der Sie den Komparator für den Vergleich bereitstellen können.
Sie können die vorhandenen Container nicht verwenden, um die Eindeutigkeit zu erzwingen, da sie alle equals
verwenden möchten.
Wenn es sich nur um ein Attribut handelt, können Sie eine Karte mit diesem Attribut als Schlüssel verwenden. Das erlaubt nur einen Eintrag pro Wert für dieses Attribut.
equals
und hashCode
sind für die Verwendung mit Sammlungen vorgesehen. Sie sollten Ihr Design ändern. Vielleicht nennen Sie Ihren eigenen Ebenbürtigen (den Sie jetzt haben) etwas anderes. Vielleicht steckst du diese Dinge nicht direkt in Sammlungen, sondern wickelst sie in einen Adapter ein.
Tags und Links java