Browse Source

feat: add utilities method for list

easepan 5 years ago
parent
commit
d9f862ce67

+ 41 - 30
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;
@@ -65,6 +37,45 @@ import java.util.function.Function;
 public class CollUtil {
 
 	/**
+	 * 填充List,以达到最小长度
+	 * @param list 列表
+	 * @param minLen 最小长度
+	 * @param padObj 填充的对象
+	 * @param <T> 集合元素类型
+	 */
+	public static <T> void padLeft(List<T> 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<T> 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 <T> 集合元素类型
+	 */
+	public static <T> void padRight(List<T> 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},返回一个不可变的默认空集合,否则返回原集合<br>
 	 * 空集合使用{@link Collections#emptySet()}
 	 *

+ 28 - 14
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.*;
 
 /**
  * 集合工具类单元测试
@@ -33,6 +20,33 @@ import java.util.SortedSet;
 public class CollUtilTest {
 
 	@Test
+	public void testPadLeft() {
+		List<Integer> srcList = CollUtil.newArrayList();
+		List<Integer> 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<Integer> srcList = CollUtil.newArrayList(6);
+		List<Integer> 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));
 	}