Guava
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
</dependency>
Multimap
@Test
public void multimapTest(){
// 传统方式 map中一个key映射多个数据时
Map<String, List<Object>> map = new HashMap<>();
List<Object> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
map.put("ss",list);
for (Map.Entry<String, List<Object>> entry : map.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
System.out.println("-----------------------------");
// 使用guava 的 Multimap后
Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("ss", "1");
multimap.put("ss", "2");
multimap.put("ss", "3");
multimap.put("ss", "4");
multimap.put("ss", "5");
multimap.put("ss", "6");
Set<String> strings = multimap.keySet();
strings.forEach(s -> {
Collection<String> collection = multimap.get(s);
System.out.println(s);
System.out.println(collection);
});
}
双主键Map之Table
Table是Guava提供的一个接口 interface Table<R, C, V>,由@param 表行键的类型 @param 表列键的类型 @param 映射值的类型
rowKey(行键) + columnKey(列键) + value(值)
- 主要使用的方法有:
- 所有行数据:cellSet()
- 所有行键值:rowKeySet()
- 所有列键值:columnKeySet()
- 所有值:values()
public class Test {
public static void main(String[] args) {
// 新建table
Table<String, String, Integer> tables = HashBasedTable.create();
tables.put("zhangsan", "javase", 80);
tables.put("lisi", "javaee", 90);
tables.put("wangwu", "c++", 100);
tables.put("zhaoliu", "guava", 70);
// 使用cellSet()获取所有table(行)数据
Set<Cell<String, String, Integer>> cells = tables.cellSet();
for (Cell<String, String, Integer> cell : cells) {
System.out.println(cell.getRowKey() + " : " + cell.getColumnKey() + " : " + cell.getValue());
}
// 获取所有的行主键
Set<String> rowKeySet = tables.rowKeySet();
// 获取所有的列主键
Set<String> columnKeySet = tables.columnKeySet();
// 获取所有的值
Collection<Integer> values = tables.values();
// 行列转换 由 行 -> 列 -> 值 转换为 列 -> 行 -> 值
Table<String, String, Integer> transpose = Tables.transpose(tables);
}
}