当前位置:  开发笔记 > 编程语言 > 正文

有没有一个很好的方法来获得Map <String,?> get和put ignore case?

如何解决《有没有一个很好的方法来获得Map<String,?>get和putignorecase?》经验,为你挑选了4个好方法。

是否有一个很好的方法来Map获得并放弃忽略案例?



1> volley..:

TreeMap扩展了Map并支持自定义比较器.

String提供默认的不区分大小写的比较器.

所以:

final Map map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);

比较器不考虑区域设置.在JavaDoc中阅读更多相关信息.


请注意,如果您控制正在使用的密钥*而不是最终用户,并且您的密钥是英语,则无需担心区域设置*.

2> Eric Weilnau..:

您可以使用Apache的Commons Collections中的CaseInsensitiveMap.


从4.0版开始,Apache的Commons Collections是通用的.

3> Guido..:

是否可以实现自己的Map覆盖put/get方法?

public class CaseInsensitiveMap extends HashMap {
    ...
    put(String key, String value) {
       super.put(key.toLowerCase(), value);
    }

    get(String key) {
       super.get(key.toLowercase());
    }
}

这种方法不会强迫您更改"密钥"类型,而是使用Map实现.


一个奇怪的副作用是,如果你列出这张地图中的键,它们会突然变成小写.
这基本上是Apache的Commons Collections CaseInsensitiveMap采用的方法.
记住在执行大写和小写操作时使用语言环境.
不要忘记覆盖所有其他"put"方法,例如putAll.
如果将其内容传输到另一个地图,请不要忘记containsKey和mind问题.
不喜欢扩展HashMap的想法,为什么不创建一个委托代码:CaseInsensitiveMap 实现Map ,并将Map 作为构造函数参数?
如果你将排球标记为已接受的答案,那就太棒了.
谨防在JDK8中这样做.实现已更改,您现在需要覆盖get,put和putAll以使其保持一致.

4> John M..:

您需要一个String键的包装类,它具有不区分大小写的equals()和hashCode()实现.使用它代替Map的键的String.

请参阅http://www.java.happycodings.com/Java_Util_Package/code3.html上的示例实现. 我在2分钟的谷歌搜索中找到了它.虽然我从未使用它,但对我来说看起来很明智.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有