diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/Partition.java b/hutool-core/src/main/java/cn/hutool/core/collection/Partition.java index 364af5c53..0cbf2b0e7 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/Partition.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/Partition.java @@ -1,5 +1,7 @@ package cn.hutool.core.collection; +import cn.hutool.core.lang.Assert; + import java.util.AbstractList; import java.util.List; @@ -21,19 +23,18 @@ public class Partition extends AbstractList> { /** * 列表分区 * - * @param list 被分区的列表 - * @param size 每个分区的长度 + * @param list 被分区的列表,非空 + * @param size 每个分区的长度,必须>0 */ public Partition(List list, int size) { - this.list = list; - this.size = size; + this.list = Assert.notNull(list); + this.size = Math.min(list.size(), size); } @Override public List get(int index) { - int listSize = list.size(); - int start = Math.min(index * size, listSize); - int end = Math.min(start + size, listSize); + final int start = index * size; + final int end = Math.min(start + size, list.size()); return list.subList(start, end); } @@ -42,8 +43,9 @@ public class Partition extends AbstractList> { // 此处采用动态计算,以应对list变 final int size = this.size; final int total = list.size(); - int length = (total + size - 1) / size; - return length; + // 类似于判断余数,当总数非整份size时,多余的数>=1,则相当于被除数多一个size,做到+1目的 + // 类似于:if(total % size > 0){length += 1;} + return (total + size - 1) / size; } @Override diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/ListUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/ListUtilTest.java index 64e8a5b2b..3215200b3 100644 --- a/hutool-core/src/test/java/cn/hutool/core/collection/ListUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/collection/ListUtilTest.java @@ -73,12 +73,16 @@ public class ListUtilTest { lists = ListUtil.splitAvg(Arrays.asList(1, 2, 3, 4), 4); Assert.assertEquals("[[1], [2], [3], [4]]", lists.toString()); - lists = ListUtil.splitAvg(Arrays.asList(1, 2, 3), 5); - Assert.assertEquals("[[1], [2], [3], [], []]", lists.toString()); lists = ListUtil.splitAvg(Arrays.asList(1, 2, 3), 2); Assert.assertEquals("[[1, 2], [3]]", lists.toString()); } + @Test + public void splitAvgTest2() { + List> lists = ListUtil.splitAvg(Arrays.asList(1, 2, 3), 5); + Assert.assertEquals("[[1], [2], [3], [], []]", lists.toString()); + } + @Test(expected = IllegalArgumentException.class) public void splitAvgNotZero() { // limit不能小于等于0