Ok, ecco il mio problema. Devo fare il HashSet
, io uso il metodo removeAll
per cancellare i valori che esistono in un set dall'altro.La raccolta rimuove Tutte le maiuscole e minuscole?
Prima di chiamare il metodo, ovviamente aggiungo i valori a Set
s. Io chiamo .toUpperCase()
su ogni String
prima di aggiungere perché i valori sono di casi diversi in entrambi gli elenchi. Non c'è nessuna rima o ragione per il caso.
Una volta chiamo removeAll
, ho bisogno di avere i casi originali indietro per i valori che sono rimasti nel Set
. C'è un modo efficace per farlo senza scorrere l'elenco originale e utilizzare CompareToIgnoreCase
?
Esempio:
List1:
"BOB"
"Joe"
"john"
"MARK"
"dave"
"Bill"
Lista2:
"JOE"
"MARK"
"DAVE"
Dopo questo, creare un separato HashSet
per ciascun List mediante toUpperCase()
su String
s. Quindi chiamare removeAll
.
Set1.removeAll(set2);
Set1:
"BOB"
"JOHN"
"BILL"
ho bisogno di ottenere l'elenco per assomigliare a questo nuovo:
"BOB"
"john"
"Bill"
Tutte le idee sarebbe molto apprezzato. So che è scadente, dovrebbe esserci uno standard per la lista originale, ma non spetta a me decidere.
Non è necessario eseguire il rollover del proprio comparatore. La classe String ne fornisce uno per te: http://java.sun.com/javase/6/docs/api/java/lang/String.html#CASE_INSENSITIVE_ORDER – banjollity
@bankollity. Grazie! - È passato da Java 1.2 e non l'ho mai notato. Codice modificato – McDowell
Wow è stato estremamente semplice da implementare anche se la documentazione porta a credere che il comparatore sia utilizzato esclusivamente per l'ordinamento. TreeSet (Comparator c): crea un nuovo set vuoto, ordinato in base al comparatore specificato. http://java.sun.com/j2se/1.4.2/docs/api/java/util/TreeSet.html#TreeSet%28java.util.Comparator%29. Sono contento che abbia funzionato, grazie mille per la tua risposta! – user84786