
文章图片

Guava是google公司开发的一款Java类库扩展工具包 , 内含了丰富的API , 涵盖了集合、缓存、并发、I/O等多个方面 。 使用这些API一方面可以简化我们代码 , 使代码更为优雅 , 另一方面它补充了很多jdk中没有的功能 , 能让我们开发中更为高效 。
今天Hydra要给大家分享的就是Guava中封装的一些关于Map的优秀操作 , 在使用了这些功能后 , 不得不说一句真香 。 先引入依赖坐标 , 然后开始我们的正式体验吧!
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version></dependency>
Table - 双键Mapjava中的Map只允许有一个key和一个value存在 , 但是guava中的Table允许一个value存在两个key 。 Table中的两个key分别被称为rowKey和columnKey , 也就是行和列 。 (但是个人感觉将它们理解为行和列并不是很准确 , 看作两列的话可能会更加合适一些) 。
举一个简单的例子 , 假如要记录员工每个月工作的天数 。 用java中普通的Map实现的话就需要两层嵌套:
Map<StringMap<StringInteger>> map=new HashMap<>();//存放元素Map<StringInteger> workMap=new HashMap<>();
workMap.put(\"Jan\"20);
workMap.put(\"Feb\"28);
map.put(\"Hydra\"workMap);//取出元素Integer dayCount = map.get(\"Hydra\").get(\"Jan\");
如果使用Table的话就很简单了 , 看一看简化后的代码:
Table<StringStringInteger> table= HashBasedTable.create();
//存放元素table.put(\"Hydra\" \"Jan\" 20);table.put(\"Hydra\" \"Feb\" 28);table.put(\"Trunks\" \"Jan\" 28);table.put(\"Trunks\" \"Feb\" 16);
//取出元素
Integer dayCount = table.get(\"Hydra\" \"Feb\");
我们不需要再构建复杂的双层Map , 直接一层搞定 。 除了元素的存取外 , 下面再看看其他的实用操作 。
1、获得key或value的集合//rowKey或columnKey的集合Set<String> rowKeys = table.rowKeySet();Set<String> columnKeys = table.columnKeySet();//value集合Collection<Integer> values = table.values();
分别打印它们的结果 , key的集合是不包含重复元素的 , value集合则包含了所有元素并没有去重:
[Hydra Trunks
[Jan Feb
[20 28 28 16
2、计算key对应的所有value的和以统计所有rowKey对应的value之和为例:
for (String key : table.rowKeySet()) { Set<Map.Entry<String Integer>> rows = table.row(key).entrySet();
int total = 0; for (Map.Entry<String Integer> row : rows) {
total += row.getValue();
System.out.println(key + \": \" + total);
打印结果:
Hydra: 48Trunks: 44
3、转换rowKey和columnKey这一操作也可以理解为行和列的转置 , 直接调用Tables的静态方法transpose:
Table<String String Integer> table2 = Tables.transpose(table);Set<Table.Cell<String String Integer>> cells = table2.cellSet();
cells.forEach(cell->
System.out.println(cell.getRowKey()+\"\"+cell.getColumnKey()+\":\"+cell.getValue())
);
利用cellSet方法可以得到所有的数据行 , 打印结果 , 可以看到row和column发生了互换:
JanHydra:20FebHydra:28JanTrunks:28FebTrunks:16
4、转为嵌套的Map还记得我们在没有使用Table前存储数据的格式吗 , 如果想要将数据还原成嵌套Map的那种形式 , 使用Table的rowMap或columnMap方法就可以实现了:
- 滴滴出行|裁员真能拯救中国互联网?
- 北斗|中国航天进入发展快车道
- 领军企业|30个!中国科协发布2022年科技领域重大问题难题
- 有人觉得中暑就是热出来的,吃一些退烧药就好了,这种做法 蚂蚁庄园今日答案6月28日
- 在昨日推文中,王者荣耀将以“____文化”为主题推出限定皮肤,为乡村振兴加油? 王者荣耀6月28日每日一题答案
- 零售业|确定涨价!iPhone14四款新机全面涨价!国行也在其中!
- 华为|意识到离不开中国了?外媒称华为、中兴或将重新打入美国市场
- 恒大|中国恒大回应被清盘呈请:极力反对 预期不影响重组计划
- 月球也在太阳系的宜居带中,为何不能产生生命?原来个头太小了
- 太空中的真菌毒素是否危害宇航员健康?科学家:尚不明确
