2013-02-04 3 views
6

Prendendo una lezione in OOP Java e poiché sono completamente nuovo al linguaggio e ancora inconsapevole dei numerosi strumenti che ha da offrire, mi trovo a gironzolare nel buio per soluzioni a cose semplici, posso hardcode questi problemi, ma io senti che esistono modi molto più semplici per farlo con java.util.Come si controllano due elenchi di stringhe l'uno contro l'altro?

Si supponga che ho una lista di stringhe

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

Come posso controllare quante volte un determinato elemento in stringTwo si verifica in stringOne? O vice versa. Preferisco non raddoppiare il ciclo ogni volta che ho questo problema (o fare un metodo a doppio ciclo).

In questo momento sono riuscito a utilizzare Collections.frequency() e solo in loop una volta ma c'è un modo più semplice? Grazie.

risposta

3

Si supponga che ho una lista di stringhe

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

Si tratta di "array", non "liste". Arrays.asList(stringOne) è un wrapper di elenco per l'array a cui fa riferimento stringOne.

Come si controlla quante volte un determinato articolo in stringTwo si verifica in stringOne?

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

vi darà l'insieme di elementi in entrambi.

Un approccio simile con un Bag anziché un set ti farà contare.

retainAll(Collection coll)

Rimuovere eventuali membri della borsa che non si trovano nella collezione donata, nel rispetto di cardinalità. Cioè, se la raccolta dati raccolti contiene n copie di un dato oggetto e il sacchetto ha m> n copie, quindi eliminare m - n copie dal sacchetto. Inoltre, se e è un oggetto nella borsa ma !coll.contains(e), rimuovere e e una qualsiasi delle sue copie.

La nozione di equivalenza utilizzati nelle classi di raccolta è quello definito da Object.equals(object) che java.lang.String sostituzioni per confrontare lessicografico.

Se è necessario restituire il risultato in una matrice, provare myBag.toArray(new String[0]) che scarica il contenuto in una stringa. L'argomento è spiegato nella documentazione, ma in breve, è un suggerimento di tipo che funziona attorno alla varianza dell'array rotto di Java.

+0

Ah grazie, molto più elegante! – arynaq