1. 程式人生 > >將list轉成map,並按照另外一個list排序

將list轉成map,並按照另外一個list排序

需求說明: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

 

當然,我是菜雞,如果有更好的方法,請大佬們多多指導我