ИМХО Всегда лучше использовать стандартный API, где это возможно. Ваш собственный пример показывает это отлично. Вы смогли опробовать свой идентичный код на двух провайдерах, когда один из них не работал должным образом. Переключение на любой собственный API не позволяет вам сделать это.
Если использование EclipseLink в качестве вашего провайдера JPA 2.0 работает хорошо для вас, используйте его. Если вы случайно столкнулись с проблемой, сообщите об ошибке EclipseLink и получите помощь на этом форуме или форумах и новостных группах EclipseLink.
Вы хотите использовать Comparator
в конструкторе TreeMap
. В частности, просмотрите String.CASE_INSENSITIVE_ORDER
.
TreeMap map = new TreeMap(String.CASE_INSENSITIVE_ORDER);
Использование Collator
или пользовательского Comparator
может лучше работать для вас в неанглийском языке или если вы требуется более сложный заказ.
Предоставьте ему компаратор, который сравнивает игнорируемый регистр строк.
TreeMap (Comparator c)
Лучше всего использовать Collator. Подборщик - это встроенный класс, который также реализует Comparable, и поэтому вы можете использовать его для своего TreeMap.
С помощью подборщика вы также можете контролировать силу сравнения, например, если вы хотите быть акцентом- также нечувствителен.
Collator stringCollator = Collator.getInstance();
stringCollator.setStrength(Collator.PRIMARY);
new TreeMap<String, String>(stringCollator)
Если бы у вас был список, я бы сказал, попробуйте Collections.sort () с компаратором. Возможно, вам придется использовать собственный Comparator, который использует String.equalsIgnoreCase () вместо equals ().
public static <T> void sort(List<T> list,
Comparator<? super T> c)
Но я был на правильном пути. Попробуйте конструктор TreeMap, который принимает Comparator:
public TreeMap(Comparator<? super K> comparator)
Да, вы хотите использовать конструктор TreeMap, который принимает Comparator. Сделайте компаратор, который использует compareToIgnoreCase.
Как универсализировать компаратор работать с разными объектами? предполагая, что у всех есть метод getId ().
Вы должны иметь возможность использовать BeanComparator .
Я подозреваю, что вам следует построить свою TreeMap
с помощью специального компаратора.
import java.text.Collator;
import java.util.Comparator;
class IgnoreCaseComp implements Comparator<String> {
Collator col;
IgnoreCaseComp() {
col = Collator.getInstance();
col.setStrength(Collator.PRIMARY);
}
public int compare(String strA, String strB) {
return col.compare(strA, strB);
}
}