一个洗数据的需求,表设计的外建不能判断某一个数据源,还要根据tyoe来进行判断才可以。 那此时呆逼的查发能实现但不够优雅,于是乎想到了二维数组,查了下资料有相关的实现给大家分享下!!
背景
表设计如下:
通过map的话 就没办法很好的实现了,需要通过两个key 来确定一个 v 此时就想到了之前摸鱼看到过二维数组!!
不得不说 该摸鱼就得摸!
有了 HashBasedTable 就能很优雅的实现 取V的逻辑了!
HashBasedTable使用介绍
别忘记引入pom!
xml
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.1-jre</version>
</dependency>
代码!
typescript
import com.google.common.collect.HashBasedTable;
public static void main(String[] args) {
HashBasedTable<Integer, Integer, String> hashBasedTable = HashBasedTable
.create();
hashBasedTable.put(0, 1, "Hello Word");
//判断row和column确定的二维点是否存在
if(hashBasedTable.contains(0, 1)) {
hashBasedTable.put(2, 3, "TEST1");
hashBasedTable.put(2, 4, "TEST2");
}
//判断是否包含columnKey的值
System.out.println("containsColumn -> " + hashBasedTable.containsColumn(3));
//判断是否包含rowKey为0的视图
System.out.println("containsRow ->" + hashBasedTable.containsRow(0));
//获取row key为2的数据集
Map<Integer, String> row = hashBasedTable.row(2);
System.out.println("row ->" + JSONObject.toJSONString(row));
//获取column为5的数据集
Map<Integer, String> column = hashBasedTable.column(3);
System.out.println("column ->" + JSONObject.toJSONString(column));
//将table转换为Map套Map格式
Map<Integer, Map<Integer, String>> rowMap = hashBasedTable.rowMap();
System.out.println("rowMap ->" + JSONObject.toJSONString(rowMap));
//获取所有的rowKey值的集合
Set<Integer> keySet = hashBasedTable.rowKeySet();
System.out.println("keySet -> " + JSONObject.toJSONString(keySet));
System.out.println("hashBasedTable ->" + JSONObject.toJSONString(hashBasedTable));
}
运行结果: