diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java index 8a368cd40..de6e45454 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java @@ -8,6 +8,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.PageUtil; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -563,4 +564,44 @@ public class ListUtil { public static List> split(List list, int size) { return partition(list, size); } + + /** + * 将集合平均分成多个list,返回这个集合的列表 + *

例:

+ *
+	 *     ListUtil.splitAvg(null, 3);	// [[], [], []]
+	 *     ListUtil.splitAvg(Arrays.asList(1, 2, 3, 4), 2);	// [[1, 2], [3, 4]]
+	 *     ListUtil.splitAvg(Arrays.asList(1, 2, 3), 5);	// [[1], [2], [3], [], []]
+	 *     ListUtil.splitAvg(Arrays.asList(1, 2, 3), 2);	// [[1, 2], [3]]
+	 * 
+ * + * @param 集合元素类型 + * @param list 集合 + * @param limit 要均分成几个list + * @return 分段列表 + */ + public static List> splitAvg(List list, int limit) { + final List> result = new ArrayList<>(); + if (CollUtil.isEmpty(list)) { + for (int i = 0; i < limit; i++) { + result.add(new ArrayList<>()); + } + return result; + } + int remainder = list.size() % limit; + int number = list.size() / limit; + int offset = 0; + for (int i = 0; i < limit; i++) { + List value; + if (remainder > 0) { + value = list.subList(i * number + offset, (i + 1) * number + offset + 1); + remainder--; + offset++; + } else { + value = list.subList(i * number + offset, (i + 1) * number + offset); + } + result.add(value); + } + return result; + } }