java hashbasedtable_Guava类库学习--Table(双键的Map)

Table是Guava提供的一个接口 Interface Table,由rowKey+columnKey+value组成 它有两个键,一个值,和一个n行三列的数据表类似,n行取决于Table对对象中存储了多少个数据

主要使用的方法有:

所有行数据:cellSet()

所有第一个key值:rowKeySet()

所有课程:columnKeySet()

所有成绩:values()

课程成绩表:rowMap()+get(stu)/row(stu)

学生成绩表 columnMap()+get(course)/column(course)

给出一个学生-课程-成绩表,测试上面提到的方法,表如下 :

d3f780478de0249577a91469de01da8f.png

1.把数据存储到Table中,通过HashBasedTable.create()新建一个Table对象

Table tables=HashBasedTable.create();

tables.put("a", "javase", 80);

tables.put("b", "javaee", 90);

tables.put("c", "javame", 100);

tables.put("d", "guava", 70);

2.得到所有行数据 tables.cellSet()

Set> cells=tables.cellSet();

for(Cell temp:cells){

System.out.println(temp.getRowKey()+" "+temp.getColumnKey()+" "+temp.getValue());

}

输出结果:

d guava 70

b javaee 90

c javame 100

a javase 80

3.得到所有学生 rowKeySet()

Set students=tables.rowKeySet();

for(String str:students){

System.out.print(str+"\t");

}

输出结果:

d b c a

4.得到所有课程 columnKeySet()

Set courses=tables.columnKeySet();

for(String str:courses){

System.out.print(str+"\t");

}

输出结果:

guava javaee javame javase

5.得到所有成绩:values

Collection scores=tables.values();

for(Integer in:scores){

System.out.print(in+"\t");

}

输出结果:

70 90 100 80

6.得到学生的课程成绩表 rowMap+get(stu)/row(stu)

for(String str:students){

Map rowMap=tables.row(str);

Set> setEntry=rowMap.entrySet();

for(Entry entry:setEntry){

System.out.println(entry.getKey()+" "+entry.getValue());

}

}

输出结果:

guava 70

javaee 90

javame 100

javase 80

7.得到学生的姓名成绩表 columnMap+get(course)/column(course)

for (String str : courses) {

Map rowMap2 = tables.column(str);

Set> setEntry2 = rowMap2.entrySet();

for (Entry entry : setEntry2) {

System.out.println(entry.getKey() + " " + entry.getValue());

}

}

输出结果为:

d 70

b 90

c 100

a 80

Demo1

public class Demo08 {

public static void main(String[] args) {

//新建一个table对象,并存入数据

Table tables=HashBasedTable.create();

tables.put("a", "javase", 80);

tables.put("b", "javaee", 90);

tables.put("c", "javame", 100);

tables.put("d", "guava", 70);

System.out.println("---------------------------按学生查看成绩---------------------------");

System.out.print("学生\t");

//得到所有课程

Set courses=tables.columnKeySet();

for(String str:courses){

System.out.print(str+"\t");

}

System.out.println();

//得到所有学生

Set stus=tables.rowKeySet();

for(String str:stus){

System.out.print(str+"\t");

//课程成绩表

Map scores=tables.row(str);

for(String c:courses){

//输出成绩

System.out.print(scores.get(c)+"\t");

}

System.out.println();

}

System.out.println("---------------------------按课程查看成绩---------------------------");

System.out.print("课程\t");

//得到所有学生

Set stus2=tables.rowKeySet();

for(String str:stus2){

System.out.print(str+"\t");

}

System.out.println();

//得到所有课程

Set courses2=tables.columnKeySet();

for(String str:courses2){

System.out.print(str+"\t");

//得到学生成绩表

Map map=tables.column(str);

for(String stu:stus2){

//输出成绩

System.out.print(map.get(stu)+"\t");

}

System.out.println();

}

System.out.println("---------------------------转换---------------------------");

//将列调换,由学生-课程-成绩表变为 课程-学生-成绩

Table tables2=Tables.transpose(tables);

// 得到所有行数据

Set> cells2 = tables2.cellSet();

for (Cell temp : cells2) {

System.out.println(temp.getRowKey() + " " + temp.getColumnKey()+ " " + temp.getValue());

}

}

}

Demo2

package HashBasedTable;

import java.util.*;

import com.google.common.collect.HashBasedTable;

import com.google.common.collect.Lists;

import com.google.common.collect.Maps;

import com.google.common.collect.Table;

/**

* Created by Administrator on 2018/5/9.

*/

public class Demo01 {

public static void main(String[] args) {

Table table = HashBasedTable.create();

table.put("0010", "i", 1);

table.put("0010", "e", 2);

table.put("0020", "c", 2);

Set columnKeySet = table.columnKeySet();

Set

> cellSet = table.cellSet();

Map column = table.column("e");

Map row = table.row("0010");

Map> rowMap = table.rowMap();

Set rowKeySet = table.rowKeySet();//获取行的值到一个set集合中

List> list = new ArrayList();

int i = 0;

for (String r : rowKeySet) {

Map map = new HashMap();

map = table.row(r);

list.add(i, map);

i++;

}

for (int j = 0; j < list.size(); j++) {

for (String m : list.get(j).keySet()) {

System.out.print(m + " " + list.get(j).get(m));

}

System.out.println();

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Guava类中的Table是一个双键Map,可以理解为一个行列式的数据结构。 Table可以用来表示一个映射,其中每个键都有一个与之关联的值,而且这个键需要由两个参数来确定。在Table中,第一个键称为"行键",第二个键称为"列键",而对应的值称为"值"。 Table的实现方式可以看作是一个Map<RowKey, Map<ColumnKey, Value>>的嵌套结构,其中RowKey和ColumnKey分别表示行键和列键,Value表示对应的值。 Table提供了多种视图,包括行视图、列视图、单元格视图等,这些视图可以方便地进行表格的操作和查询。 下面是一个简单的示例代码: ```java Table<String, String, Integer> table = HashBasedTable.create(); table.put("row1", "col1", 1); table.put("row1", "col2", 2); table.put("row2", "col1", 3); table.put("row2", "col2", 4); System.out.println(table.get("row1", "col1")); // 输出1 System.out.println(table.row("row1")); // 输出{col1=1, col2=2} System.out.println(table.column("col1")); // 输出{row1=1, row2=3} System.out.println(table.cellSet()); // 输出[(row1,col1)=1, (row1,col2)=2, (row2,col1)=3, (row2,col2)=4] ``` 在上面的示例中,我们创建了一个Table对象,并往其中添加了四个元素。然后,我们分别通过get方法、row方法、column方法和cellSet方法获取了对应的视图,并输出了它们的内容。 需要注意的是,Table中的行键、列键和值都可以为null,但是在使用时需要特别注意空指针异常的问题。此外,Table中的行键和列键必须实现equals和hashCode方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值