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;
        }
    }
 );

Демоверсия