最近做一个报表系统,统计全天的指定时间的数据,数据又分了好几类,数据模型如下
time typeA valueA
time typeB valueB
联想到此种数据存储模式跟redis的hash操作类似,key ------ field --------value式的存储结构,决定采用java进行抽象
key选择用String类型,field和value采用一个整体,类似于map进行处理,为了让map有序输入,采用LinkedHashMap,最终抽象出来的编码如下:
import java.util.LinkedHashMap;
import java.util.Map;
/**
* ClassName:HashInfo
* Function: TODO ADD FUNCTION.
* Reason: TODO ADD REASON.
* Date: 2016年1月23日 下午3:40:58
* @author ygwu
* @version v1.0
* @see
*/
@SuppressWarnings({ "rawtypes", "serial" })
public class HashInfo extends LinkedHashMap{
private Map sub = new LinkedHashMap();
/**
* 设置sub.
*
* @param sub 设置HashInfo类型变量 sub
*/
public void setSub(Map sub) {
this.sub = sub;
}
@SuppressWarnings("unchecked")
public synchronized void hset(String key,String hkey,Object value){
sub = (Map) this.get(key);
if(sub == null){
sub = new LinkedHashMap();
}
sub.put(hkey, value);
this.put(key, sub);
}
public synchronized Object hget(String key,String hkey){
Map sub = (Map) this.get(key);
if(sub != null){
return sub.get(hkey);
}
return null;
}
}
测试程序如下:
/**
* Project Name:ucardynpriceweb
* File Name:HashInfoTest.java
* Package Name:com.zuche.pricing.report.util
* Date:2016年1月29日下午1:58:13
* Copyright (c) 2016, ygwu@10101111.com|yg.wu02@zuche.com All Rights Reserved.
*
*/
package com.zuche.pricing.report.util;
/**
* ClassName:HashInfoTest
* Function: TODO ADD FUNCTION.
* Reason: TODO ADD REASON.
* Date: 2016年1月29日 下午1:58:13
* @author ygwu
* @version v1.0
* @see
*/
public class HashInfoTest {
public static void main(String[] args) {
HashInfo hash = new HashInfo();
hash.hset("key", "field", "value");
System.out.println(hash.hget("key", "field"));
}
}