带有null键的Java不区分大小写的映射[duplicate]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有null键的Java不区分大小写的映射[duplicate]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

Java中是否存在使用区分大小写的字符串匹配的Map实现,但是还支持null键?我知道

new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER)

支持不区分大小写的String键匹配,但不支持null键。

答案

如果您使用的是Java 8,则以下内容将创建一个与null兼容,不区分大小写的TreeMap

Comparator<String> cmp = Comparator.nullsFirst(String.CASE_INSENSITIVE_ORDER);
TreeMap<String, String> map = new TreeMap<>(cmp);

无需外部库。

另一答案

你可以使用CaseInsensitiveMap。这将满足您的要求。它不区分大小写,也支持null键。

来自doc

不区分大小写的Map。在将键添加到映射或与其他现有键进行比较之前,可以使用Unicode数据文件中的信息以与语言环境无关的方式将它们转换为全小写。

支持空密钥。

keySet()方法返回所有小写键或空值。

另一答案

如果您不想使用外部库,可以为String.CASE_INSENSITIVE_ORDER创建自己的包装器,以可预测的方式对nulls进行排序:

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

Demo.

以上是关于带有null键的Java不区分大小写的映射[duplicate]的主要内容,如果未能解决你的问题,请参考以下文章

在使用SpringBoot开发的REST API中映射到Java Object时,使XML有效内容字段不区分大小写

映射对象标识符

如何将不区分大小写的字典映射到 NHibernate。?

不改变 POJO 的不区分大小写的 JSON 到 POJO 的映射

映射不区分大小写 - 代码优先 - 实体框架

春天mvc。不区分大小写的获取参数映射