Java 實現(xiàn)將List平均分成若干個集合
1.初衷是由于調(diào)用銀行接口的批量處理接口時,每次最多只能處理500條數(shù)據(jù),但是當(dāng)數(shù)據(jù)總數(shù)為510條時。我又不想第一次調(diào)用處理500條,第二次調(diào)用處理10條數(shù)據(jù),我想要的是每次處理255條數(shù)據(jù)。
下面展示的是我的處理方法
2.寫了一個簡單的ListUtils:
package com.example.springboottest.common.util; import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.google.common.collect.Lists; /** * List 工具類 * @author Neo * @date 2018年4月16日13:13:37 */ public class ListUtils { /** * 將一個List均分成n個list,主要通過偏移量來實現(xiàn)的 * * @param source 源集合 * @param limit 最大值 * @return */ public static <T> List<List<T>> averageAssign(List<T> source, int limit) { if (null == source || source.isEmpty()) { return Collections.emptyList(); } List<List<T>> result = new ArrayList<>(); int listCount = (source.size() - 1) / limit + 1; int remaider = source.size() % listCount; // (先計算出余數(shù)) int number = source.size() / listCount; // 然后是商 int offset = 0;// 偏移量 for (int i = 0; i < listCount; i++) { List<T> value; if (remaider > 0) { value = source.subList(i * number + offset, (i + 1) * number + offset + 1); remaider--; offset++; } else { value = source.subList(i * number + offset, (i + 1) * number + offset); } result.add(value); } return result; } public static void main(String[] args) { List list = new ArrayList(); for (int i = 0; i < 65; i++) { list.add(i); } List<List> result = averageAssign(list, 15); result.forEach(l -> { l.forEach(i -> System.out.print(i + "\t") ); System.out.println(); }); System.out.println("===================================================="); result = averageAssign(list, 20); result.forEach(l -> { l.forEach(i -> System.out.print(i + "\t") ); System.out.println(); }); System.out.println("===================================================="); // Guava 實現(xiàn)不平均分組 result = Lists.partition(list ,100); result.forEach(l -> { l.forEach(i -> System.out.print(i + "\t") ); System.out.println(); }); } }
3.展示一下測試結(jié)果:
補充知識:Java8 Lambda 分割List
我就廢話不多說了,大家還是直接看代碼吧~
/** * @author caishen * @version 1.0 * @className CollectionUtils * @date 2019/5/23 11:54 * 自分で書いたコードの各行を擔(dān)當(dāng)する * @dis 切割list工具類 **/ public class CollectionUtils { public static <T> List<List<T>> divide(List<T>origin , int size){ if(Assert.isEmpty(origin)){ return Collections.emptyList(); } int block = (origin.size() + size -1) / size; return IntStream.range(0,block). boxed().map(i->{ int start = i*size; int end = Math.min(start + size,origin.size()); return origin.subList(start,end); }).collect(Collectors.toList()); } public static void main(String[] args) { System.out.println(divide(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 3)); } }
以上這篇Java 實現(xiàn)將List平均分成若干個集合就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決springboot項目啟動報錯Error creating bean with&nb
這篇文章主要介紹了解決springboot項目啟動報錯Error creating bean with name dataSourceScriptDatabaseInitializer問題,具有很好的參考價值,希望對大家有所幫助2024-03-03Mybatis配置錯誤:java.lang.ExceptionInInitializerError
這篇文章主要介紹了Mybatis配置錯誤:java.lang.ExceptionInInitializerError的相關(guān)資料,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12Java 數(shù)據(jù)結(jié)構(gòu)之堆的概念與應(yīng)用
堆是一顆完全二叉樹,在這棵樹中,所有父節(jié)點都滿足大于等于其子節(jié)點的堆叫大根堆,所有父節(jié)點都滿足小于等于其子節(jié)點的堆叫小根堆,堆雖然是一顆樹,但是通常存放在一個數(shù)組中,父節(jié)點和孩子節(jié)點的父子關(guān)系通過數(shù)組下標(biāo)來確定2021-10-10Spring事務(wù)管理中關(guān)于數(shù)據(jù)庫連接池詳解
事務(wù)的作用就是為了保證用戶的每一個操作都是可靠的,事務(wù)中的每一步操作都必須成功執(zhí)行,只要有發(fā)生異常就 回退到事務(wù)開始未進(jìn)行操作的狀態(tài)。事務(wù)管理是Spring框架中最為常用的功能之一,我們在使用Spring Boot開發(fā)應(yīng)用時,大部分情況下也都需要使用事務(wù)2022-12-12一篇文章帶你了解MySQL數(shù)據(jù)庫基礎(chǔ)
這篇文章主要介紹了MySql數(shù)據(jù)庫基礎(chǔ)知識點,總結(jié)整理了mysql數(shù)據(jù)庫基本創(chuàng)建、查看、選擇、刪除以及數(shù)據(jù)類型相關(guān)操作技巧,需要的朋友可以參考下2021-08-08