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

一: 需求

現(xiàn)在我們一個(gè)數(shù)據(jù)庫表t_series_value_rate存儲(chǔ)的是每個(gè)汽車對(duì)應(yīng)的保值率. 其中一個(gè)車系id可以對(duì)應(yīng)多條數(shù)據(jù).表內(nèi)容部分截取如下:
大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

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

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

二: 代碼示例

對(duì)外暴漏的API接口, 方便別的項(xiàng)目調(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>>>>(){});
}

這里我們傳入的是一個(gè)車系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 = listAllSeriesValueRate();
  &nbs
        
		

網(wǎng)友評(píng)論