guava中的Table
提供两层映射关系(row, col)->value
1、Table接口
方法有
boolean contains(Object rowKey, Object columnKey) |
boolean containsRow(Object rowKey) |
boolean containsColumn(Object columnKey) |
boolean containsValue(Object value) |
V get(Object rowKey, Object columnKey) |
boolean isEmpty() |
int size() |
boolean equals(Object obj) |
int hashCode() |
void clear() |
V put(R rowKey, C columnKey, V value) |
void putAll(Table<? extends R, ? extends C, ? extends V> table) |
V remove(Object rowKey, Object columnKey) |
Map<C, V> row(R rowKey) |
Map<R, V> column(C columnKey) |
Set<Cell<R, C, V>> cellSet() |
Set<R> rowKeySet() |
Set<C> columnKeySet() |
Collection<V> values() |
Map<R, Map<C, V>> rowMap() |
Map<C, Map<R, V>> columnMap() |
2、实现
类 | 说明 |
HashBasedTable | LinkedHashMap<R, LinkedHashMap<C, V>>实现 |
TreeBasedTable | TreeMap<R, TreeMap<C,V>>实现 |
ArrayTable | 一个二维数组实现 |
ImmutableTable | ImmutableMap<R, ImmutableMap<C, V>>实现,对稀疏或密集的数据集都有优化 |
3、实践
3.1 添加maven依赖
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>31.1-jre</version>
</dependency>
3.2 应用
3.2.1 创建表,填充数据
Table<String,String,Integer> tables = HashBasedTable.create();
tables.put("a", "javase", 80);
tables.put("b", "javaee", 90);
tables.put("c", "javame", 100);
tables.put("d", "guava", 70);
log.info("tables:{}", tables);
3.2.2 行读取
Set<String> students = tables.rowKeySet();
for (String student : students) {Map<String, Integer> rowMap = tables.row(student);Set<Map.Entry<String, Integer>> setEntries = rowMap.entrySet();for (Map.Entry<String, Integer> entry : setEntries) {log.info("entry:{}", entry);}
}
3.2.3 列读取
Set<String> courses = tables.columnKeySet();
for (String str : courses) {Map<String, Integer> colMap = tables.column(str);for (Map.Entry<String, Integer> entry : colMap.entrySet()) {log.info("entry:{}", entry);}
}
3.2.4 cell读取
Set<Cell<String, String, Integer>> cellSet = tables.cellSet();
for (Cell<String, String, Integer> cell : cellSet) {log.info("{} {} {}", cell.getRowKey(), cell.getColumnKey(), cell.getValue());
}
参考资料:
http://ifeve.com/google-guava-newcollectiontypes/
guava中的Table相关推荐
- 【cocos2d-x】Lua中的table函数库
一部分的table函数只对其数组部分产生影响, 而另一部分则对整个table均产生影响. 下面会分开说明. table.concat(table, sep, start, end) concat是c ...
- 转HTML中的table转为excel
转换html 中的table 为excel,firefox浏览器支持,代码如下 <%@ page language="java" contentType="text ...
- guava中 graphs 六
2019独角兽企业重金招聘Python工程师标准>>> guava中 graphs 六 介绍 guava的common.graph 是一个图类型结构的库,也就是实体和他们之间的关系的 ...
- Guava中针对集合的 filter和过滤功能
Guava中针对集合的 filter和过滤功能 博客分类: JAVA相关 在guava库中,自带了过滤器(filter)的功能,可以用来对collection 进行过滤,先看例子: Java代码 ...
- ABAP中的Table Control编程
SAP中,Table Control是在Screen中用的最广泛的控件之一了,可以实现对多行数据的编辑. 简单来说,Table Control是一组屏幕元素在Screen上的重复出现,这就是它与普通屏 ...
- antd table排序 vue_ant-design-vue中的table取消默认不排序的状态
ant-design-vue中的table组件具有排序的属性,该排序属性有三种状态:升序.降序和不排序.在项目开发中,有时产品经理会要求排序时只能有升序或降序两种状态,而table组件中却没有相应的A ...
- Oracle中Cluster Table的使用
大家对通常oracle中的cluster的理解是不准确的,经常和sql server中的cluster index混淆.Cluster是存储一组table的一种方法,这些table共享同一数据块中的某 ...
- 简单分析Guava中RateLimiter中的令牌桶算法的实现
为什么80%的码农都做不了架构师?>>> 令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法.典型情况下,令 ...
- 网页表格线框html,关于Dreamweaver中怎么让html网页中的table边框细线显示?
关于Dreamweaver中怎么让html网页中的table边框细线显示? 对于不是编程的我们,用Dreamweaver制作表格的`情况下.默认表格边框会标的比较粗,今天给大家介绍下制作西表格超级简单 ...
最新文章
- SqlServer项目经验:介质集有2个介质簇,但只提供了1个。必须提供所有成员
- a good way for improving my reading ability
- 复习--3--对于第三堂课的总结--将两个页面相互用超链接链接到一起
- Android Animation实现元素在屏幕上按照指定轨迹运动,以及出现NullPointerException的解决方案
- 【POJ - 3624 】Charm Bracelet (dp,0-1背包裸题)
- 这款插件不既有Chrome版【飞秋下载】
- hive 如何将数组转成字符串_Hive 字符串操作[转]
- 如何在 Pr 中创建动作序列?
- Atitit webservice的发现机制 discover机制
- 各国个人信息安全立法进度
- pyqt5标签中的字设置不同字体_PyQt5 控件字体样式等设置的实现
- ubuntu10.10下ESPON v350扫描仪的安装
- 写给大一充实,大二不顺,大三迷茫的同学
- 中国建筑设计行业市场调查研究及发展前景展望报告(2022-2028年)
- 利用Kmeans聚类进行用户分层分析
- 【宝藏分享】自从用了这款PPT插件,小伙伴们都跪着看我
- 面试官:什么是虚拟DOM?如何实现一个虚拟DOM?
- 【java工具方法】十六进制字符串转字符串
- npm登录:忘记了用户名和密码,通过邮箱找回流程
- ubuntu 18,问题总结