將list轉成map,並按照另外一個list排序
阿新 • • 發佈:2018-11-02
需求說明:A list假如是一串編碼,
通過in的sql語句可以查到一連串另外的資料(List<B> = select (A list); ),但查出來的資料(List<B>)是按資料庫的自然順序進行排序的,無法與原來的list(A List)對應,也就是說
無法做到A、B、C進去a、b、c出來,而是變成其他順序出來,所以需要對出來的資料進行重新排序。
環境:java8以上
示例程式碼如下:
public AccountResultData accountMoneyRegion(AccountResultData accountResultData, Map<String, Object> continueMap, List<String> nameList, List<String> codeList, String year) { List<String> barAreaData = new ArrayList<>(); Map<String, Object> map = new HashMap<>(continueMap);//建立用於查詢用的map map.put("type", "2");//新增引數 map.put("codeList", codeList);//這就是上面提到的A list map.put("time", year); List<TakeAccountRegion> takeAccountRegionList = takeAccountRegionMapper.selectByTypeAndCodeList(map);//將map傳入sql層內查詢出List<B> //此處便出現了List<B>與A list不能一一對應的情況 //下面就是解決方法: Map<String,TakeAccountRegion> takeAccountRegionMap = takeAccountRegionList.stream().collect( Collectors.toMap(a -> a.getRegionCode(), a -> a)); for(String code:codeList) { barAreaData.add(MoneyUtils.matchMonmey(takeAccountRegionMap.get(code).getTotalMoneny()).toString()); } accountResultData.setBarAreaData(barAreaData); accountResultData.setAreaYAxisData(nameList); return accountResultData; }
其中關鍵性的程式碼:
Map<String,TakeAccountRegion> takeAccountRegionMap = takeAccountRegionList.stream().collect(
Collectors.toMap(a -> a.getRegionCode(),
a -> a));
怎麼理解這段程式碼呢?首先聲明瞭一個String,某物件(這裡是:TakeAccountRegion)的map,必須保證key是唯一值:
這裡就是a.getRegionCode()這裡,a就是物件它本身
然後再通過迴圈,用之前的list,來從這個map裡取值即可。
此處牽扯到了JAVA 8 新特性:Lambda表示式
關於JAVA 8 新特性 可以參考:https://blog.csdn.net/u014470581/article/details/54944384
當然,我是菜雞,如果有更好的方法,請大佬們多多指導我