From d9f862ce67a5fed3ab0dfecd448b649d46907ad0 Mon Sep 17 00:00:00 2001 From: easepan Date: Mon, 20 Jul 2020 19:21:25 +0800 Subject: [PATCH 1/2] feat: add utilities method for list --- .../cn/hutool/core/collection/CollUtil.java | 71 +++++++++++-------- .../hutool/core/collection/CollUtilTest.java | 42 +++++++---- 2 files changed, 69 insertions(+), 44 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java index c25987075..b9709f1cf 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java @@ -12,39 +12,11 @@ import cn.hutool.core.lang.Matcher; import cn.hutool.core.lang.func.Func1; import cn.hutool.core.lang.hash.Hash32; import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.ArrayUtil; -import cn.hutool.core.util.CharUtil; -import cn.hutool.core.util.ClassUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.ReflectUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.core.util.TypeUtil; +import cn.hutool.core.util.*; import java.lang.reflect.Type; -import java.util.AbstractCollection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Deque; -import java.util.EnumSet; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; -import java.util.NavigableSet; -import java.util.Objects; -import java.util.Set; -import java.util.SortedSet; -import java.util.Stack; -import java.util.TreeMap; -import java.util.TreeSet; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.CopyOnWriteArrayList; @@ -64,6 +36,45 @@ import java.util.function.Function; */ public class CollUtil { + /** + * 填充List,以达到最小长度 + * @param list 列表 + * @param minLen 最小长度 + * @param padObj 填充的对象 + * @param 集合元素类型 + */ + public static void padLeft(List list, int minLen, T padObj) { + Objects.requireNonNull(list); + if (isEmpty(list)) { + padRight(list, minLen, padObj); + return; + } + int iterCnt = minLen - list.size(); + if (iterCnt < 1) { + return; + } + List padList = new ArrayList<>(iterCnt); + for (int i = 0; i < iterCnt; i++) { + padList.add(padObj); + } + list.addAll(0, padList); + } + + /** + * 填充List,以达到最小长度 + * @param list 列表 + * @param minLen 最小长度 + * @param padObj 填充的对象 + * @param 集合元素类型 + */ + public static void padRight(List list, int minLen, T padObj) { + Objects.requireNonNull(list); + int iterCnt = minLen - list.size(); + for (int i = 0; i < iterCnt; i++) { + list.add(padObj); + } + } + /** * 如果提供的集合为{@code null},返回一个不可变的默认空集合,否则返回原集合
* 空集合使用{@link Collections#emptySet()} diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java index b14391d5c..d18a52ea7 100644 --- a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java @@ -10,20 +10,7 @@ import lombok.Data; import org.junit.Assert; import org.junit.Test; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.SortedSet; +import java.util.*; /** * 集合工具类单元测试 @@ -32,6 +19,33 @@ import java.util.SortedSet; */ public class CollUtilTest { + @Test + public void testPadLeft() { + List srcList = CollUtil.newArrayList(); + List answerList = CollUtil.newArrayList(2, 1); + CollUtil.padLeft(srcList, 1, 1); + CollUtil.padLeft(srcList, 2, 2); + Assert.assertEquals(srcList, answerList); + + srcList = CollUtil.newArrayList(1, 2); + answerList = CollUtil.newArrayList(1, 2); + CollUtil.padLeft(srcList, 2, 1); + Assert.assertEquals(srcList, answerList); + + srcList = CollUtil.newArrayList(3); + answerList = CollUtil.newArrayList(1, 1, 3); + CollUtil.padLeft(srcList, 3, 1); + Assert.assertEquals(srcList, answerList); + } + + @Test + public void testPadRight() { + List srcList = CollUtil.newArrayList(6); + List answerList = CollUtil.newArrayList(6, 3, 3, 3, 3); + CollUtil.padRight(srcList, 5, 3); + Assert.assertEquals(srcList, answerList); + } + @Test public void isNotEmptyTest() { Assert.assertFalse(CollUtil.isNotEmpty((Collection) null)); From 78729283e84a21d79c5d204a9c1e526df56ecad5 Mon Sep 17 00:00:00 2001 From: easepan Date: Wed, 22 Jul 2020 14:25:46 +0800 Subject: [PATCH 2/2] feat: utility method for padding list --- .../cn/hutool/core/collection/CollUtil.java | 19 +++++--------- .../hutool/core/collection/CollUtilTest.java | 26 +++++++++---------- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java index b9709f1cf..4d444b2c4 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java @@ -38,6 +38,7 @@ public class CollUtil { /** * 填充List,以达到最小长度 + * * @param list 列表 * @param minLen 最小长度 * @param padObj 填充的对象 @@ -45,32 +46,26 @@ public class CollUtil { */ public static void padLeft(List list, int minLen, T padObj) { Objects.requireNonNull(list); - if (isEmpty(list)) { + if (list.isEmpty()) { padRight(list, minLen, padObj); return; } - int iterCnt = minLen - list.size(); - if (iterCnt < 1) { - return; + for (int i = list.size(); i < minLen; i++) { + list.add(0, padObj); } - List padList = new ArrayList<>(iterCnt); - for (int i = 0; i < iterCnt; i++) { - padList.add(padObj); - } - list.addAll(0, padList); } /** * 填充List,以达到最小长度 + * * @param list 列表 * @param minLen 最小长度 * @param padObj 填充的对象 * @param 集合元素类型 */ - public static void padRight(List list, int minLen, T padObj) { + public static void padRight(Collection list, int minLen, T padObj) { Objects.requireNonNull(list); - int iterCnt = minLen - list.size(); - for (int i = 0; i < iterCnt; i++) { + for (int i = list.size(); i < minLen; i++) { list.add(padObj); } } diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java index d18a52ea7..12d2a95c2 100644 --- a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java @@ -21,28 +21,28 @@ public class CollUtilTest { @Test public void testPadLeft() { - List srcList = CollUtil.newArrayList(); - List answerList = CollUtil.newArrayList(2, 1); - CollUtil.padLeft(srcList, 1, 1); - CollUtil.padLeft(srcList, 2, 2); + List srcList = CollUtil.newArrayList(); + List answerList = CollUtil.newArrayList("a", "b"); + CollUtil.padLeft(srcList, 1, "b"); + CollUtil.padLeft(srcList, 2, "a"); Assert.assertEquals(srcList, answerList); - srcList = CollUtil.newArrayList(1, 2); - answerList = CollUtil.newArrayList(1, 2); - CollUtil.padLeft(srcList, 2, 1); + srcList = CollUtil.newArrayList("a", "b"); + answerList = CollUtil.newArrayList("a", "b"); + CollUtil.padLeft(srcList, 2, "a"); Assert.assertEquals(srcList, answerList); - srcList = CollUtil.newArrayList(3); - answerList = CollUtil.newArrayList(1, 1, 3); - CollUtil.padLeft(srcList, 3, 1); + srcList = CollUtil.newArrayList("c"); + answerList = CollUtil.newArrayList("a", "a", "c"); + CollUtil.padLeft(srcList, 3, "a"); Assert.assertEquals(srcList, answerList); } @Test public void testPadRight() { - List srcList = CollUtil.newArrayList(6); - List answerList = CollUtil.newArrayList(6, 3, 3, 3, 3); - CollUtil.padRight(srcList, 5, 3); + List srcList = CollUtil.newArrayList("a"); + List answerList = CollUtil.newArrayList("a", "b", "b", "b", "b"); + CollUtil.padRight(srcList, 5, "b"); Assert.assertEquals(srcList, answerList); }