首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过Value获取Map中的键值Key的四种方法

1 简介

我们都知道是存放键值对的容器,知道了Key值,使用方法能快速获取Value值。然而,有的时候我们需要反过来获取,知道Value值,求Key值。

本文将用实例介绍四种方法,通过传入Value值,获取得到Key值。

2 四种方法

2.1 循环法

循环法就是通过遍历Map里的Entry,一个个比较,把符合条件的找出来。会有三种情况:

(1)找到一个值

(2)找到多个值

(3)找不到

具体代码如下:

想特别说的一点是,在对比是否相等的时候,使用了方法,而不是用方法。这样可以避免空指针异常。

2.2 Stream方法

总是在多种集合操作上都能提供优雅直观的方法,易写易理解。通过一个过滤器,即可把满足相等条件的值取出来,代码如下:

2.3 Guava的BiMap

Google的提供了这样一个双向Map,调用方法会返回一个反向的关联的,然后便可以通过方法获取key值了。

代码如下:

需要注意的是,作为一个双向的,它不能存储多对一的关系;而是可以的。其实很好理解,因为是双向的,所以即要满足值的唯一性,也要满足值的唯一性。如果往里存放同样的Value,会抛异常:。

2.4 Apache Commons Collections的BidiMap

类似地,也提供了双向Map的类,它也是维持一对一的关系,不能多对一。它提供了方法返回Key值。代码如下:

与Guava的不同的是,当存放同样的Value时,它不会抛异常,而是覆盖原有的数据。

3 总结

本文介绍了四种通过Value值获取Map中的Key值的方法,分别是循环法、Stream、Guava、Apache Commons Collections,这四种方法类似但不尽相同。

(1)循环法和使用Stram本质上都是要遍历的,如果一个Map经常需要反向取Key值,则不建议使用,可以考虑Guava和Apache Commons提供的双向Map;

(2)双向Map其实是一种空间换取时间的思想,虽然能较快的找到满足条件的Key值,但它也使用了更多的空间来储存双向Map;

(3)双向Map并不支持多对一的关系。

如何选择,就看具体需求来取舍了。

欢迎关注公众号,将持续为你更新...

多读书,多分享;多写作,多整理。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191103A08ZCL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券