From d9f862ce67a5fed3ab0dfecd448b649d46907ad0 Mon Sep 17 00:00:00 2001 From: easepan Date: Mon, 20 Jul 2020 19:21:25 +0800 Subject: [PATCH] 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));