多个索引的内存数据结构guavaTable.md
多个索引的内存数据结构guavaTable.md
北京起航 发表于3年前
多个索引的内存数据结构guavaTable.md
  • 发表于 3年前
  • 阅读 14
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 开发中经常遇到多列索引的内存数据结构,原来的做法是 用 Map<key100, Map<key200, Object>>来实现,稍复杂[写着不方便,用着也不方便;代码也不好理解]。 其实guava 有封装好的 Table 集合类型,来满足次业务场景。

多个索引的数据结构 用guavaTable.md
开发中经常遇到多列索引的内存数据结构,原来的做法是 用 Map<key100, Map<key200, Object>>来实现,稍复杂[写着不方便,用着也不方便;代码也不好理解]。 其实guava 有封装好的 Table 集合类型,来满足次业务场景。 Table支持“row”和“column”,而且提供多种视图。

Table<Integer, Integer, String> table = HashBasedTable.create();
       
table.put(1, 1, "11");
table.get(1,1);

项目代码

/**
* key=用户id ,value = 多列索引 table     key1:活动id key2:是指标id
*/
private LoadingCache<String, Table<String, String, ActivityLatestData>> dataCache;
dataCache = CacheBuilder.newBuilder().maximumSize(5000).build(
    new CacheLoader<String, Table<String, String, ActivityLatestData>>() {
        public Table<String, String, ActivityLatestData> load(String userId) throws Exception {
            return getUserTableData(userId);
        }
    }
);

table初始化

private Table<String, String, ActivityLatestData> getUserTableData(String userId) {
 Table<String, String, ActivityLatestData> table = HashBasedTable.create();
        IActivityLatestDataService userService =PointApp.getService(IActivityLatestDataService.class);
        ActivityLatestData pojo = new ActivityLatestData();
        pojo.setUserId(userId);
        List<ActivityLatestData> datas = userService.getByPojo(pojo);
        for (ActivityLatestData data : datas) {
            table.put(data.getActivityId(), data.getMetricId(), data);
        }
        return table;
}
```
获取数据

```
ActivityLatestData latestData = table.get(activity.getId(), metricId);
```

共有 人打赏支持
粉丝 52
博文 51
码字总数 29304
×
北京起航
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: