今天有一個新需求, 是對一個List進(jìn)行分組, 于是便百度到一些可用的代碼以及我們項目使用的一些tools, 在這里總結(jié)下方便以后查閱.

一: 需求

現(xiàn)在我們一個數(shù)據(jù)庫表t_series_value_rate存儲的是每個汽車對應(yīng)的保值率. 其中一個車系id可以對應(yīng)多條數(shù)據(jù).表內(nèi)容部分截取如下:
電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

其中series_id是車系id, car_year代表這個車的年限. 比如說車系id為1的車1年的保值率為81.5%, 2年的保值率為73.7%.

那么現(xiàn)在我需要傳遞過來一個series_id list去查詢出相應(yīng)的數(shù)據(jù), 我們是對數(shù)據(jù)庫表t_series_value_rate查詢所有做了緩存的, 如果我們對傳入的series_id list進(jìn)行遍歷的話勢必會很慢. 所以如果能夠根據(jù)series_id進(jìn)行分組的話, 那么效率就會高的多.

二: 代碼示例

對外暴漏的API接口, 方便別的項目調(diào)用:

public List<HashMap<Long, List<SeriesValueRateDTO>>> listSeriesValueRates(List<Long> seriesIds) throws Exception {
    ApiResponse response = httpGet("/api/server/series-value-rates/list-series-value-rates.htm?seriesIds=" + Joiner.on(",").skipNulls().join(seriesIds));    return JSON.parseObject(response.getJsonObject().get("data").toString(), new TypeReference<List<HashMap<Long, List<SeriesValueRateDTO>>>>(){});
}

這里我們傳入的是一個車系id集合.
然后繼續(xù)往下調(diào)用:

public List<SeriesValueRateDTO> listSeriesValueRate(final long seriesId) {
    String key = "listSeriesValueRate" + seriesId;    return managerService.get(key, new Callable<List<SeriesValueRateDTO>>() {        @Override
        public List<SeriesValueRateDTO> call() throws Exception {
            Map<Long, List<SeriesValueRateDTO>> valueRateDTOs =