Besten vergleichen Sie Zwei Listen von Objekten, in Java
Habe ich zwei Listen von Objekten.
public class CustomObj {
Long key1;
Integer key2;
Integer key3;
Integer key4;
Integer key5;
BigDecimal value1
BigDecimal value2
BigDecimal value3
BigDecimal value4
BigDecimal value5; }
public class CustomKey {
Long key1;
Integer key2;
Integer key3;
Integer key4;
Integer key5; }
Objekt nicht über eine eindeutige Kennung, aber 5 Felder zu key1 key5 aus Objekt einen eindeutigen Schlüssel für das Objekt. Ich habe zum vergleichen von zwei Listen von Objekten. Ich habe zum Vergleich die Werte in Objekt nur bei eindeutiger Schlüssel bestehend aus key1-key5 Felder sind die gleichen in beiden Objekten.
Derzeit bin ich die Schaffung von zwei HashMaps, die zwei Listen.
Map<CustomKey, CustomObj>
Dann habe ich Durchlaufen zunächst hashmap, für jeden Schlüssel, den ich überprüfen, ob dieser Schlüssel vorhanden ist, in anderen hashmap und wenn es das tut, bekomme ich das Objekt von anderen hashmap und dann vergleichen Sie diese beiden Objekte.
Gibt es einen besseren Weg, es zu tun?
- Kann man den code, wie du Sie vergleichen? Dann können wir Ihnen sagen, wenn das ist okay oder nicht.
- Haben Sie das Überschreiben von equals/hashcode Methode
- Nehmen wir an ich habe zwei Karten nämlich objMap1, objMap2 generiert aus der Liste der Objekte. ` for(Map.Eintrag<CustomKey, CustomObject> entry : objMap1.entrySet()) { CustomKey-Schlüssel = Eintrag.getKey(); CustomObject a = Eintrag.getValue(); CustomObject b = objMap2.get(key); }`, Wie ich zwei Objekte mit dem gleichen key nun, ich kann vergleichen Sie die Werte für diese Objekte.
- Was meinst du mit "ich habe zu vergleichen, die Werte in Objekt nur bei eindeutiger Schlüssel bestehend aus key1-key5 Felder sind die gleichen in beiden Objekten"? Klingt wie Sie sowieso müssen, vergleichen Sie alle Felder, um festzustellen, dass zwei Objekte gleich sind.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überschreiben der equals-und hashcode-Methode basiert auf den ersten fünf Tasten.
Dann können Sie nur verwenden equals-Methode zum Vergleich der Objekte und
die Kollektion bulk-Operationen wie retainAll etc.
Könnte man überschreiben Sie Equals und HashCode von CustomObj.
Dann verwenden Contains() zu testen Einzigartigkeit.
Empfehle ich die Nutzung
Objects.equals()
undObjects.hash()
zur Umsetzung der Geschlechter-check und hash-code-Berechnung. Sie sind null-sicher und einfach zu schreiben und zu verstehen:Ähnlich mit
CustomObj
.Nach der Implementierung dieser Methoden, Sie können sicher verwenden diese Objekte in der hash-Sammlungen.
Hoffe, dies wird helfen Sie aus, hier ist Sie Klasse:
equal
- Methode und bei der Umsetzung bin ich compairing Attribute der KlasseCustomObj
mitCustomKey
CustomObj:
CustomKey:
ClassCastException
da du nicht durchführeninstanceof
überprüfen.