com.google.common.collect.Table 雙鍵的Map

com.google.common.collect.Table 存放的數據,以2個鍵(rowKey+columnKey)一個值的形式,提供了以下方法:

cellSet()

rowKeySet()

columnKeySet()

values()

以下是以學生課程實例代碼:

import java.util.Map;
import java.util.Set;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import com.google.common.collect.Table.Cell;
import com.google.common.collect.Tables;

Table<String,String,Integer> tables = HashBasedTable.create();
//測試數據
tables.put("a", "javase", 80);
tables.put("b", "javase", 90);
tables.put("a", "oracle", 100);
tables.put("c", "oracle", 95);
//所有的行數據
Set<Cell<String,String,Integer>> cells = tables.cellSet();
for(Cell<String,String,Integer> temp:cells){
    System.out.println(temp.getRowKey()+":"+temp.getColumnKey()+":"+temp.getValue());
}
/**
 * b:javase:90
   c:oracle:95
   a:oracle:100
   a:javase:80
*/
System.out.println("==========學生查看成績==============");
System.out.print("學生\t");
//所有的課程
Set<String> cours = tables.columnKeySet();
for(String t:cours){
    System.out.print(t+"\t");
}
System.out.println();
//所有的學生
Set<String> stus = tables.rowKeySet();
for(String stu:stus){
    System.out.print(stu+"\t");
    Map<String,Integer> scores = tables.row(stu);
    for(String c:cours){
        System.out.print(scores.get(c)+"\t");
    }
    System.out.println();
}
/**
 * 學生	javase	oracle	
    b	90	null	
    c	null	95	
    a	80	100
 */
System.out.println("==========課程查看成績==============");
System.out.print("課程\t");
//所有的學生
Set<String> stuSet = tables.rowKeySet();
for(String t:stuSet){
    System.out.print(t+"\t");
}
System.out.println();
//所有的課程
Set<String> courSet = tables.columnKeySet();
for(String c:courSet){
    System.out.print(c+"\t");
    Map<String,Integer> scores = tables.column(c);
    for(String s:stuSet){
        System.out.print(scores.get(s)+"\t");
    }
    System.out.println();
}
/**
 * 課程		b	c	a	
   javase	90	null	80	
   oracle	null	95      100
 */

System.out.println("===========轉換===========");
Table<String,String,Integer> tables2 = Tables.transpose(tables);
//所有的行數據
Set<Cell<String,String,Integer>> cells2 = tables2.cellSet();
for(Cell<String,String,Integer> temp:cells2){
    System.out.println(temp.getRowKey()+":"+temp.getColumnKey()+":"+temp.getValue());
}
/**
 *  javase:b:90
    oracle:c:95
    oracle:a:100
 */

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章