1,從hbase中讀出數據並存儲在ArrayList<Map<String,String>>中,
@Override
public ArrayList<Map<String, Object>> getAllHistoryOrderByTime(String namespace, String tableName) {
TableName tablename=TableName.valueOf(FillDataTableName(namespace,tableName));
Table table = null;
ArrayList<Map<String,Object>> arrayList = new ArrayList<>();
try {
conn = ConnectionFactory.createConnection(conf);
//管理類
table = conn.getTable(tablename);
ResultScanner results = table.getScanner(new Scan());
for (Result result : results){
Map<String,Object> map = new HashMap<>();
for(Cell cell : result.rawCells()){
String row = Bytes.toString(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());
//String family = Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength());
String colName = Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(),cell.getQualifierLength());
String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());
map.put("modelName",row);
if(colName.equals("tableName")){
map.put("tableName",value);
}if(colName.equals("project")){
map.put("project",value);
}if(colName.equals("columns")){
ArrayList<String> columnsList = StringOptions.String2ArrayList(value);
map.put("columns",columnsList);
}if(colName.equals("preProcess")){
ArrayList<String> preProcessList = StringOptions.String2ArrayList(value);
map.put("preProcess",preProcessList);
}if(colName.equals("result")){
map.put("result",value);
}if(colName.equals("params")){
Map<String,String> paramsMap = StringOptions.String2Map(value);
map.put("params",paramsMap);
}
//獲取時間戳
long lTmstmp = cell.getTimestamp();
Date date = new Date(lTmstmp);
map.put("Date",date.toString());
}
arrayList.add(map);
}
} catch (IOException e) {
e.printStackTrace();
}
return SortOptions.sortByTime(arrayList);
}
其中ArrayList<Map<String,String>>初始化爲:
ArrayList<Map<String,String>> arrayList = new ArrayList<>();
arrayList.add(new HashMap<String, String>() {{
put("Name","1");
put("Date","Sat Sep 21 16:06:55 CST 2019");
}
});
2、將ArrayList<Map<String,String>>按照時間戳進行排序
public static ArrayList<Map<String,String>> sortByTime(ArrayList<Map<String,String>> inputArrayList){
Comparator c = new Comparator<Map<String,String>>() {
@Override
public int compare(Map<String,String> o1, Map<String,String> o2) {
// TODO Auto-generated method stub
if(string2Date(o1.get("Date")).before(string2Date(o2.get("Date"))))
return 1;
//注意!!返回值必須是一對相反數,否則無效。jdk1.7以後就是這樣。
// else return 0; //無效
else return -1;
}
};
Collections.sort(inputArrayList,c);
return inputArrayList;
}
3、將字符串轉換爲Date類型
public static Date string2Date(String strDate) {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", java.util.Locale.US);
try {
date = sdf.parse(strDate.toString());
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}