Guava Table接口
Table表示一个特殊的Map,其中可以以组合方式指定两个key来引用单个值。它类似于创建Map的Map。
使用添加依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
Guava Table接口的方法
方法 | 描述 |
---|---|
Set<Table.Cell<R,C,V>> cellSet() | 返回一组所有行键/列键/值三元组。 |
void clear() | 从表中删除所有映射。 |
Map<R,V> column(C columnKey) | 返回具有给定列键的所有映射的视图。 |
Set<C> columnKeySet() | 返回一组在表中具有一个或多个值的列键。 |
Map<C,Map<R,V>> columnMap() | 返回一个视图,该视图将每个列键与从行键到值的对应映射相关联。 |
boolean contains(Object rowKey, Object columnKey) | 如果表包含具有指定行和列键的映射,则返回 true。 |
boolean containsColumn(Object columnKey) | 如果表包含具有指定列的映射,则返回 true。 |
boolean containsRow(Object rowKey) | 如果表包含具有指定行键的映射,则返回 true。 |
boolean containsValue(Object value) | 如果表包含具有指定值的映射,则返回 true。 |
boolean equals(Object obj) | 将指定对象与此表进行比较是否相等。 |
V get(Object rowKey, Object columnKey) | 返回与给定行和列键对应的值,如果不存在此类映射,则返回 null。 |
int hashCode() | 返回此表的哈希码。 |
boolean isEmpty() | 如果表不包含映射,则返回 true。 |
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。 |
Set<R> rowKeySet() | 返回一组在表中具有一个或多个值的行键。 |
Map<R,Map<C,V>> rowMap() | 返回一个Map,该视图将每个行键与从列键到值的对应映射相关联。 |
int size() | 返回表中行键/列键/值映射的数量。 |
Collection<V> values() | 返回所有值的集合,其中可能包含重复项。 |
Guava Table接口示例
import org.junit.Test;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import java.util.*;
/**
* @Author: zmy
* @CreateDate: 2022/8/24
* @CreateTime: 10:20
* @Description:
*/
public class CuavaTableTest {
@Test
public void test1(){
Table<String, String, String> table = HashBasedTable.create();
table.put("ALBB", "101","A101");
table.put("ALBB", "102","A102");
table.put("ALBB", "103","A103");
table.put("Microsoft", "111","M111");
table.put("Microsoft", "112","M112");
table.put("Microsoft", "113","M113");
table.put("TCL", "121","T121");
table.put("TCL", "122","T122");
table.put("TCL", "123","T123");
Map<String, String> ibm = table.row("ALBB");
System.out.println("获取 ALBB 映射的Map集合");
for(Map.Entry<String, String> entry : ibm.entrySet()) {
System.out.println("Emp Id: " + entry.getKey() + ", Name: " + entry.getValue());
}
Set<String> uniqueKey = table.rowKeySet();
System.out.println("获取唯一主键");
System.out.println("uniqueKey = " + uniqueKey);
// 转为嵌套的Map
System.out.println("将Table转换为嵌套Map的结构");
Map<String, Map<String, String>> stringMapMap = table.rowMap();
System.out.println("stringMapMap = " + stringMapMap);
// 获取值
System.out.println("获取Table中所有的值(value)");
List<String> values = new ArrayList<>(table.values());
System.out.println("values = " + values);
}
}
结果: