Карта вида <Строка, Объект> ключами с IgnoreCase?

ИМХО Всегда лучше использовать стандартный API, где это возможно. Ваш собственный пример показывает это отлично. Вы смогли опробовать свой идентичный код на двух провайдерах, когда один из них не работал должным образом. Переключение на любой собственный API не позволяет вам сделать это.

Если использование EclipseLink в качестве вашего провайдера JPA 2.0 работает хорошо для вас, используйте его. Если вы случайно столкнулись с проблемой, сообщите об ошибке EclipseLink и получите помощь на этом форуме или форумах и новостных группах EclipseLink.

8
задан finnw 7 November 2009 в 11:59
поделиться

7 ответов

Вы хотите использовать Comparator в конструкторе TreeMap . В частности, просмотрите String.CASE_INSENSITIVE_ORDER .

TreeMap map = new TreeMap(String.CASE_INSENSITIVE_ORDER);

Использование Collator или пользовательского Comparator может лучше работать для вас в неанглийском языке или если вы требуется более сложный заказ.

37
ответ дан 5 December 2019 в 04:39
поделиться

Предоставьте ему компаратор, который сравнивает игнорируемый регистр строк.

TreeMap (Comparator c)

1
ответ дан 5 December 2019 в 04:39
поделиться

Лучше всего использовать Collator. Подборщик - это встроенный класс, который также реализует Comparable, и поэтому вы можете использовать его для своего TreeMap.

С помощью подборщика вы также можете контролировать силу сравнения, например, если вы хотите быть акцентом- также нечувствителен.

Collator stringCollator = Collator.getInstance();
stringCollator.setStrength(Collator.PRIMARY); 
new TreeMap<String, String>(stringCollator)
7
ответ дан 5 December 2019 в 04:39
поделиться

Если бы у вас был список, я бы сказал, попробуйте 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)
0
ответ дан 5 December 2019 в 04:39
поделиться

Да, вы хотите использовать конструктор TreeMap, который принимает Comparator. Сделайте компаратор, который использует compareToIgnoreCase.

0
ответ дан 5 December 2019 в 04:39
поделиться

Как универсализировать компаратор работать с разными объектами? предполагая, что у всех есть метод getId ().

Вы должны иметь возможность использовать BeanComparator .

0
ответ дан 5 December 2019 в 04:39
поделиться

Я подозреваю, что вам следует построить свою 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);
  }
}
0
ответ дан 5 December 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: