具體解決方案如下:
public static void main(String[] args){ // 造假數據 List<HashMap<String,String>> list=new ArrayList<>(); for(int i=0 ;i<=2 ;i ++ ){ HashMap <String,String> map= new HashMap<>(); map.put("id",i+""); map.put("mobileNo",155+""+i); list.add(map); } System.out.println("查詢數據集合長度: "+list.size()); Map<String,List<HashMap<String,String>>> map = groupList(list,2); System.out.println("分組後的總數據集合: "+map); System.out.println(map.size()); for(int i=0; i<map.size() ;i++){ List<HashMap<String, String>> newList = map.get("keyName" + i); System.out.println("分組後的單個集合數據: "+newList.toString()); if(CollectionUtils.isNotEmpty(newList)){ //獲取分組中的手機號 ,拼接 StringBuffer sbf=new StringBuffer(); for(int j=0 ; j<newList.size();j++){ HashMap<String, String> newMap = newList.get(j); String mobileNo = MapUtils.getString(newMap, "mobileNo"); if(j+1==newList.size()){ sbf.append(mobileNo); }else{ sbf.append(mobileNo).append(","); } } String phons = sbf.toString(); System.out.println("處理後的手機號數據: "+phons); if(phons.length() > 0){ System.out.println("發短信: "+phons); } } } }
/** * 分組取出List中的數據 每400條爲一組取出 * @param list 可存入幾十萬條數據的List * @param groupSize 每組數據長度 * @return */ public Map<String,List<HashMap<String,String>>> groupList(List list,int groupSize){ if(groupSize <= 0){ groupSize =100 ; } int listSize=list.size(); int toIndex=groupSize; //用map存起來新的分組後數據 Map<String,List<HashMap<String,String>>> map = new HashMap(); int keyToken = 0; for(int i = 0;i<list.size();i+=groupSize){ //作用爲toIndex最後沒有100條數據則剩餘幾條newList中就裝幾條 if(i+groupSize>listSize){ toIndex=listSize-i; } List<HashMap<String,String>> newList = list.subList(i,i+toIndex); map.put("keyName"+keyToken, newList); keyToken++; } return map; }
參考
https://www.cnblogs.com/wkrbky/p/6100984.html