Java с учетом регистра с нулевым ключом
Есть ли реализация Java на Java, которая будет использовать нечувствительное к регистру соответствие строк для ключа, , но также поддерживает нулевой ключ?
Я знаю, что
new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER)
поддерживает нечувствительное к регистру сопоставление строковых ключей, но оно не поддерживает нулевой ключ.
Ответы
Ответ 1
Если вы используете Java 8, следующее создаст нулевую совместимость, нечувствительную к регистру TreeMap
:
Comparator<String> cmp = Comparator.nullsFirst(String.CASE_INSENSITIVE_ORDER);
TreeMap<String, String> map = new TreeMap<>(cmp);
Никаких внешних библиотек не требуется.
Ответ 2
Вы можете использовать CaseInsensitiveMap для этого. Это выполнит ваше требование.
Он нечувствителен к регистру, а также поддерживает нулевые ключи.
Из документа
Нечувствительная к регистру карта. Перед добавлением ключей на карту или сравнением с другими существующими ключами они преобразуются во все строчные буквы в не зависящий от языка, используя информацию из данных Unicode файл.
Поддерживаются ключи Null.
Метод keySet() возвращает все строчные ключи или нули.
Ответ 3
Если вы предпочитаете не использовать внешние библиотеки, вы можете создать собственную оболочку для String.CASE_INSENSITIVE_ORDER
, которая будет сортировать null
предсказуемым образом:
NavigableMap<String,String> m = new TreeMap(
new Comparator<String>() {
public int compare(String s1, String s2) {
if (s1 == null && s2 == null) return 0;
if (s1 != null && s2 != null) {
return String.CASE_INSENSITIVE_ORDER.compare(s1, s2);
}
return s1 == null ? -1 : 1;
}
}
);
Демоверсия