2016-07-14 28 views
-1

ListA und ListB beide TrackingBean Objekte enthält, jetzt muss ich sowohl die Objektwerte hier Name Liste vergleichen als auch AltersvariableJava Vergleichen Sie die Objektwerte von zwei Listen und speichern Sie unübliche Objekte in der 3. Liste?

ListA = ["Raj",20],["Narayan",25],["Sree",32]; 

ListB = ["Raj",20],["Narayan",25],["Sree",32]; 

Im obigen Szenario ListC Größe Null sein wird, weil beide Liste gleich sind.

ListA = ["Raj",20],["Narayan",25],["Sree",32]; 

ListB = ["Sree",32],["Raj",20],["Narayan",25]; 

Jetzt sollte ich auch ListC Größe als Null bekommen. Das obige Szenario ist unabhängig von der Reihenfolge der Objekte.

ListA = ["Raj",20],["Narayan",25],["Sree",32]; 

ListB = ["Sree",32],["Raj",20],["Narayan",25],["Srinivas",18]; 

Im obigen Szenario ListC speichern Sollte neues Objekt:

ListC=["Srinivas",18];`enter code here` 

Könnten Sie mir vorschlagen, einen Java-Code für die obigen einer Implementierung ?? Danke

Antwort

1

Eine Option wäre, zwei Sätze aus den Listen A und B zu erstellen. Dann können Sie Set.removeAll() verwenden, um die Elemente in den Sätzen A und B zu finden, die für jeden Satz einzigartig sind. Deine ursprüngliche Frage hat diesbezügliche Informationen weggelassen, aber jede Menge könnte ein Element enthalten, das nicht in der anderen Menge erscheint. Meine Antwort nimmt die Vereinigung aller Elemente, die sich nicht schneiden. Wenn Sie den Unterschied zwischen nur einem Satz und einem anderen unterscheiden möchten, können Sie dies entsprechend ändern.

Set<TrackingBean> sA = new HashSet<TrackingBean>(listA); 
Set<TrackingBean> sB = new HashSet<TrackingBean>(listB); 

Set<TrackingBean> diffA = sA.removeAll(sB); 
Set<TrackingBean> diffB = sB.removeAll(sA); 

Set<TrackingBean> diffTotal = new HashSet<TrackingBean>(); 
diffTotal.addAll(diffA); 
diffTotal.addAll(diffB); 
+0

was ist 'list.retainAll()' Methode? – emotionlessbananas

+0

@AsteriskNinja Wenn ich nicht falsch lese, möchte das OP _ Elemente nicht gemeinsam behalten, es möchte sie entfernen. Daher ist 'removeAll' hier sinnvoll. –

+1

eigentlich lese ich falsch, danke für die Korrektur – emotionlessbananas

0

können Sie listA.retainAll(listB) verwenden und ArrayList

0

Ich weiß, richtige Antwort gegeben wurde, obwohl ich etwas zu bestehenden Antwort hinzufügen möchten

you @ Tim Biegeleisen verwenden können

aber stellen sicher, dass Sie equals() Methode und hashCode() Methoden 0 überschrieben habenohne diese beiden Methoden in Ihrer Bean-Klasse überschreiben beide Methoden werden nicht funktionieren