2013-02-04 13 views
6

Ich nehme eine Klasse in OOP Java und da ich völlig neu in der Sprache bin und mir der vielen Tools, die es zu bieten hat, nicht bewusst bin, finde ich mich im Dunkeln nach Lösungen für einfache Dinge, ich kann diese Probleme fest codieren fühle, es gibt viel einfachere Möglichkeiten, dies mit java.util zu tun.Wie überprüfe ich zwei Listen von Strings gegeneinander?

Angenommen, ich habe eine Liste von Strings

String[] stringOne = {"a","b","c", "potato"}; 
String[] stringTwo = {"potato", "13"}; 

Wie kann ich überprüfen, wie oft jedes gegebene Element in stringTwo in stringOne auftritt? Oder umgekehrt. Ich würde lieber nicht doppelt Schleife jedes Mal, wenn ich dieses Problem habe (oder eine Doppel-Schleife-Methode).

Im Moment komme ich mit der Verwendung Collections.frequency() und nur einmal Schleifen, aber gibt es einen einfacheren Weg? Vielen Dank.

Antwort

3

Angenommen ich

String[] stringOne = {"a","b","c", "potato"}; 
String[] stringTwo = {"potato", "13"}; 

Diese sind "Arrays", nicht "Listen", um eine Liste von Zeichenketten haben. Arrays.asList(stringOne) ist ein Listen-Wrapper für das Array, auf das von stringOne verwiesen wird.

Wie überprüfe ich, wie oft ein gegebenes Element in stringTwo in stringOne vorkommt?

new HashSet(Arrays.asList(stringOne)).retainAll(Arrays.asList(stringTwo)) 

gibt Ihnen die Menge der Elemente in beiden.

Ein ähnlicher Ansatz mit einem Bag anstelle eines Satzes erhalten Sie zählt.

retainAll(Collection coll)

Entfernen Sie alle Mitglieder der Tasche, die nicht in der angegebenen Sammlung sind, Mächtigkeit zu respektieren. Das heißt, wenn die gegebene Sammlung coll n Kopien eines gegebenen Objekts enthält und der Beutel m> n Kopien hat, dann lösche m - n Kopien aus dem Beutel. Wenn e ein Objekt in der Tasche ist, aber !coll.contains(e), dann entfernen Sie e und alle seine Kopien.

Der Begriff der Gleichwertigkeit in den Sammelklassen verwendet wird, durch Object.equals(object) welche java.lang.String überschreibt lexikographisch zu vergleichen, die definiert ist.

Wenn Sie das Ergebnis wieder in einem Array benötigen, versuchen Sie myBag.toArray(new String[0]), die den Inhalt auf eine Zeichenfolge ablegt. Das Argument wird in der Dokumentation erklärt, aber kurz gesagt, es ist ein Typhinweis, der die gebrochene Arrayvarianz von Java umgeht.

+0

Ah danke, viel eleganter! – arynaq

Verwandte Themen