Ok, así que aquí está mi problema. Tengo que HashSet
, utilizo el método removeAll
para eliminar valores que existen en un conjunto del otro.Colección removeTodo caso ignorante?
Antes de llamar al método, obviamente agrego los valores al Set
s. Llamo al .toUpperCase()
en cada String
antes de agregar porque los valores son de casos diferentes en ambas listas. No hay rima o razón para el caso.
Una vez que llamo al removeAll
, necesito recuperar las fundas originales para los valores que quedan en el Set
. ¿Hay una forma eficiente de hacerlo sin tener que pasar por la lista original y usar CompareToIgnoreCase
?
Ejemplo:
Lista1:
"BOB"
"Joe"
"john"
"MARK"
"dave"
"Bill"
Lista2:
"JOE"
"MARK"
"DAVE"
Después de esto, crear una separada HashSet
para cada lista usando toUpperCase()
en String
s. Luego llame al removeAll
.
Set1.removeAll(set2);
Set1:
"BOB"
"JOHN"
"BILL"
necesito para obtener la lista para parecerse a esto de nuevo:
"BOB"
"john"
"Bill"
Cualquier idea sería muy apreciada. Sé que es pobre, debería haber un estándar para la lista original, pero eso no me corresponde a mí decidir.
No necesita hacer su propio comparador. La clase String proporciona una para usted: http://java.sun.com/javase/6/docs/api/java/lang/String.html#CASE_INSENSITIVE_ORDER – banjollity
@bankollity. ¡Gracias! - Eso estuvo allí desde Java 1.2 y nunca lo había notado. Código enmendado – McDowell
Wow fue extremadamente simple de implementar aunque la documentación lo lleva a creer que el comparador se usa únicamente para la clasificación. TreeSet (Comparador c): construye un nuevo conjunto vacío, ordenado de acuerdo con el comparador especificado. http://java.sun.com/j2se/1.4.2/docs/api/java/util/TreeSet.html#TreeSet%28java.util.Comparator%29. Me alegro de que haya funcionado, ¡muchas gracias por su respuesta! – user84786