今天有一個新需求, 是對一個List進行分組, 于是便百度到一些可用的代碼以及我們項目使用的一些tools, 在這里總結下方便以后查閱.
一: 需求
現(xiàn)在我們一個數(shù)據(jù)庫表t_series_value_rate存儲的是每個汽車對應的保值率. 其中一個車系id可以對應多條數(shù)據(jù).表內容部分截取如下:
其中series_id是車系id, car_year代表這個車的年限. 比如說車系id為1的車1年的保值率為81.5%, 2年的保值率為73.7%.
那么現(xiàn)在我需要傳遞過來一個series_id list去查詢出相應的數(shù)據(jù), 我們是對數(shù)據(jù)庫表t_series_value_rate查詢所有做了緩存的, 如果我們對傳入的series_id list進行遍歷的話勢必會很慢. 所以如果能夠根據(jù)series_id進行分組的話, 那么效率就會高的多.
二: 代碼示例
對外暴漏的API接口, 方便別的項目調用:
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ù)往下調用:
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 =