多个索引的内存数据结构guavaTable.md

本文介绍了一种使用Guava库中的Table数据结构实现多列索引的方法,相较于传统的多级Map,Table提供了更为简洁且易于理解的API。通过具体的项目代码示例,展示了如何利用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);
```

转载于:https://my.oschina.net/itnms/blog/465747

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值