Java按照時間順序從hbase中讀出數據

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;
    }

 

 

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