編輯了半天又不顯示了 靠.ssssss
public?static?void?main(String[]?args){//構造數據
List<Data>?list?=?new?ArrayList<Data>();
list.add(new?Data("三國誌12",?"03-01",?"5"));
list.add(new?Data("雷霆戰機",?"03-01",?"2"));
list.add(new?Data("真三國無雙7",?"03-02",?"4"));
list.add(new?Data("三國誌12",?"03-03",?"5"));
list.add(new?Data("雷霆戰機",?"03-04",?"5"));
list.add(new?Data("真三國無雙7",?"03-05",?"5"));
String[][]?tableData?=?toTable(list);
if?(log.isDebugEnabled()){
log.debug(JsonUtil.format(tableData));
}
}
/** *?將?config裝成?二維數組?table. * *?@param?list *the?list *?@param?nameComparator *the?name?comparator *?@param?keyComparator *the?key?comparator *?@return?the?string[][] */private?static?String[][]?toTable(List<Data>?list){
//這個問題的核心,是通過name和key?取到?value值
//因此,為了性能,設計壹個map,這個map的key?是config的name和key拼接起來的
Map<String,?Data>?map?=?new?LinkedHashMap<String,?Data>();
//LinkedHashSet?保證循環的順序
Set<String>?nameSet?=?new?LinkedHashSet<String>();
Set<String>?keySet?=?new?LinkedHashSet<String>();
for?(Data?config?:?list){
String?key?=?config.getKey();
String?name?=?config.getName();
nameSet.add(name);
keySet.add(key);
//確保map中的key不會重復
String?k?=?key?+?"@"?+?name;
map.put(k,?config);
}
int?rowLength?=?list.size();
int?columnLength?=?nameSet.size()?+?1;
String[][]?table?=?new?String[rowLength][columnLength];
//第壹行?放name?標題
table[0]?=?CollectionsUtil.toArray(nameSet);
int?i?=?0;
for?(String?key?:?keySet){
String[]?array?=?new?String[columnLength];
array[0]?=?key;
int?j?=?0;
for?(String?name?:?nameSet){
String?k?=?key?+?"@"?+?name;
Data?config?=?map.get(k);
String?value?=?null;
if?(null?!=?config){
value?=?config.getValue();
}
array[j?+?1]?=?value;
j++;
}
table[i?+?1]?=?array;
i++;
}
return?table;
}
13:34:00?DEBUG?(CopyOfDataTest.java:90)?[main()]?[[
"三國誌12",
"雷霆戰機",
"真三國無雙7"
],
[
"03-01",
"5",
"2",
null
],
[
"03-02",
null,
null,
"4"
],
[
"03-03",
"5",
null,
null
],
[
"03-04",
null,
"5",
null
],
[
"03-05",
null,
null,
"5"
]
]