Итак, вот моя проблема. У меня есть HashSet
, я использую метод removeAll
для удаления значений, которые существуют в одном наборе от другого.Коллекция removeAll игнорируя случай?
До вызова метода я, очевидно, добавляю значения к Set
. Я вызываю .toUpperCase()
на каждый String
перед добавлением, потому что значения имеют разные случаи в обоих списках. В этом случае нет рифмы или причины.
Как только я звоню removeAll
, мне нужно вернуть оригинальные чехлы для значений, оставшихся в Set
. Есть ли эффективный способ сделать это, не просматривая исходный список и используя CompareToIgnoreCase
?
Пример:
List1:
"BOB"
"Joe"
"john"
"MARK"
"dave"
"Bill"
List2:
"JOE"
"MARK"
"DAVE"
После этого, создать отдельный HashSet
для каждого списка с использованием toUpperCase()
на String
с. Затем позвоните removeAll
.
Set1.removeAll(set2);
Set1:
"BOB"
"JOHN"
"BILL"
Мне нужно, чтобы получить список, чтобы посмотреть, как это снова:
"BOB"
"john"
"Bill"
Любые идеи будут оценены. Я знаю, что это плохо, должен быть стандарт для первоначального списка, но это не для меня.
Не нужно катить собственный компаратор. Класс String предоставляет один для вас: http://java.sun.com/javase/6/docs/api/java/lang/String.html#CASE_INSENSITIVE_ORDER – banjollity
@bankollity. Благодаря! - это было там с Java 1.2, и я никогда не замечал этого. Код изменен. – McDowell
Ничего себе, что было очень просто реализовать, хотя в документации вы верите, что компаратор используется исключительно для сортировки. TreeSet (Comparator c): Создает новый пустой набор, отсортированный в соответствии с указанным компаратором. http://java.sun.com/j2se/1.4.2/docs/api/java/util/TreeSet.html#TreeSet%28java.util.Comparator%29. Я рад, что это сработало, благодарю вас за ваш ответ! – user84786