This commit is contained in:
Looly 2023-03-07 16:12:48 +08:00
parent 3c35654177
commit ececce7c52
12 changed files with 79 additions and 83 deletions

View File

@ -34,7 +34,7 @@ import java.util.function.Predicate;
public class ListUtil {
/**
* 新建一个List<br>
* 新建一个{@link ArrayList}<br>
* 如果提供的初始化数组为空新建默认初始长度的List
*
* @param <T> 集合元素类型
@ -178,7 +178,7 @@ public class ListUtil {
/**
* 数组转为一个不可变List<br>
* 类似于Java9中的List.of<br>
* 不同于Arrays.asList此方法的原数组修改时并不会影响List
* 不同于Arrays.asList此方法不允许修改数组
*
* @param ts 对象
* @param <T> 对象类型

View File

@ -6,6 +6,7 @@ import cn.hutool.core.lang.Chain;
import java.nio.file.Path;
import java.nio.file.WatchEvent;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
@ -35,7 +36,7 @@ public class WatcherChain implements Watcher, Chain<Watcher, WatcherChain>{
* @param watchers 观察者列表
*/
public WatcherChain(final Watcher... watchers) {
chain = ListUtil.of(watchers);
chain = Arrays.asList(watchers);
}
@Override

View File

@ -1,6 +1,7 @@
package cn.hutool.core.util;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.collection.SetUtil;
import cn.hutool.core.collection.UniqueKeySet;
import cn.hutool.core.collection.iter.IterUtil;
import cn.hutool.core.comparator.CompareUtil;
@ -620,7 +621,7 @@ public class ArrayUtil extends PrimitiveArrayUtil {
* 包装 {@link System#arraycopy(Object, int, Object, int, int)}<br>
* 数组复制源数组和目标数组都是从位置0开始复制<br>
*
* @param <T> 目标数组类型
* @param <T> 目标数组类型
* @param src 源数组
* @param dest 目标数组
* @param length 拷贝数组长度
@ -635,7 +636,7 @@ public class ArrayUtil extends PrimitiveArrayUtil {
* 包装 {@link System#arraycopy(Object, int, Object, int, int)}<br>
* 数组复制
*
* @param <T> 目标数组类型
* @param <T> 目标数组类型
* @param src 源数组
* @param srcPos 源数组开始位置
* @param dest 目标数组
@ -1956,8 +1957,8 @@ public class ArrayUtil extends PrimitiveArrayUtil {
* @param <T> 数组元素类型该类型需要实现Comparable接口
* @param array 数组
* @return 数组是否有序
* @since 6.0.0
* @throws NullPointerException 如果数组元素含有null值
* @since 6.0.0
*/
public static <T extends Comparable<? super T>> boolean isSorted(final T[] array) {
if (isEmpty(array)) {
@ -1985,9 +1986,9 @@ public class ArrayUtil extends PrimitiveArrayUtil {
* @param <T> 数组元素类型该类型需要实现Comparable接口
* @param array 数组
* @return 数组是否升序
* @throws NullPointerException 如果数组元素含有null值
* @author FengBaoheng
* @since 5.5.2
* @throws NullPointerException 如果数组元素含有null值
*/
public static <T extends Comparable<? super T>> boolean isSortedASC(final T[] array) {
if (isEmpty(array)) {
@ -2011,9 +2012,9 @@ public class ArrayUtil extends PrimitiveArrayUtil {
* @param <T> 数组元素类型该类型需要实现Comparable接口
* @param array 数组
* @return 数组是否降序
* @throws NullPointerException 如果数组元素含有null值
* @author FengBaoheng
* @since 5.5.2
* @throws NullPointerException 如果数组元素含有null值
*/
public static <T extends Comparable<? super T>> boolean isSortedDESC(final T[] array) {
if (isEmpty(array)) {
@ -2083,8 +2084,9 @@ public class ArrayUtil extends PrimitiveArrayUtil {
/**
* 判断数组中是否有相同元素
* <p>若传入空数组则返回{@code false}</p>
* @param <T> 数组元素类型
* @param array 数组
*
* @param <T> 数组元素类型
* @param array 数组
* @return 数组是否有相同元素
* @since 6.0.0
*/
@ -2092,7 +2094,8 @@ public class ArrayUtil extends PrimitiveArrayUtil {
if (isEmpty(array)) {
return false;
}
Set<T> elementSet = new HashSet<>(Arrays.asList(array));
final Set<T> elementSet = SetUtil.of(Arrays.asList(array));
return elementSet.size() != array.length;
}
}

View File

@ -57,7 +57,7 @@ public class CollUtilTest {
@SuppressWarnings("ConstantConditions")
@Test
public void hasNullTest() {
ArrayList<Object> list = null;
List<Object> list = null;
Assert.assertTrue(CollUtil.hasNull(list));
list = ListUtil.of();
@ -72,7 +72,7 @@ public class CollUtilTest {
@Test
public void defaultIfEmpty() {
ArrayList<String> strings = CollUtil.defaultIfEmpty(ListUtil.of(), ListUtil.of("1"));
List<String> strings = CollUtil.defaultIfEmpty(ListUtil.of(), ListUtil.of("1"));
Assert.assertEquals(ListUtil.of("1"), strings);
strings = CollUtil.defaultIfEmpty(null, ListUtil.of("1"));
@ -81,22 +81,22 @@ public class CollUtilTest {
@Test
public void defaultIfEmpty2() {
final ArrayList<String> strings = CollUtil.defaultIfEmpty(ListUtil.of(), Function.identity(), () -> ListUtil.of("1"));
final List<String> strings = CollUtil.defaultIfEmpty(ListUtil.of(), Function.identity(), () -> ListUtil.of("1"));
Assert.assertEquals(ListUtil.of("1"), strings);
}
@Test
public void testPredicateContains() {
final ArrayList<String> list = ListUtil.of("bbbbb", "aaaaa", "ccccc");
final List<String> list = ListUtil.of("bbbbb", "aaaaa", "ccccc");
Assert.assertTrue(CollUtil.contains(list, s -> s.startsWith("a")));
Assert.assertFalse(CollUtil.contains(list, s -> s.startsWith("d")));
}
@Test
public void testRemoveWithAddIf() {
ArrayList<Integer> list = ListUtil.of(1, 2, 3);
final ArrayList<Integer> exceptRemovedList = ListUtil.of(2, 3);
final ArrayList<Integer> exceptResultList = ListUtil.of(1);
List<Integer> list = ListUtil.of(1, 2, 3);
final List<Integer> exceptRemovedList = ListUtil.of(2, 3);
final List<Integer> exceptResultList = ListUtil.of(1);
List<Integer> resultList = CollUtil.removeWithAddIf(list, ele -> 1 == ele);
Assert.assertEquals(list, exceptRemovedList);
@ -149,8 +149,8 @@ public class CollUtilTest {
@Test
public void unionTest() {
final ArrayList<String> list1 = ListUtil.of("a", "b", "b", "c", "d", "x");
final ArrayList<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d");
final List<String> list1 = ListUtil.of("a", "b", "b", "c", "d", "x");
final List<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d");
final Collection<String> union = CollUtil.union(list1, list2);
@ -159,8 +159,8 @@ public class CollUtilTest {
@Test
public void intersectionTest() {
final ArrayList<String> list1 = ListUtil.of("a", "b", "b", "c", "d", "x");
final ArrayList<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d");
final List<String> list1 = ListUtil.of("a", "b", "b", "c", "d", "x");
final List<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d");
final Collection<String> intersection = CollUtil.intersection(list1, list2);
Assert.assertEquals(2, CollUtil.count(intersection, "b"::equals));
@ -169,9 +169,9 @@ public class CollUtilTest {
@Test
public void intersectionDistinctTest() {
final ArrayList<String> list1 = ListUtil.of("a", "b", "b", "c", "d", "x");
final ArrayList<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d");
final ArrayList<String> list3 = ListUtil.of();
final List<String> list1 = ListUtil.of("a", "b", "b", "c", "d", "x");
final List<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d");
final List<String> list3 = ListUtil.of();
final Collection<String> intersectionDistinct = CollUtil.intersectionDistinct(list1, list2);
Assert.assertEquals(SetUtil.ofLinked("a", "b", "c", "d"), intersectionDistinct);
@ -183,8 +183,8 @@ public class CollUtilTest {
@Test
public void disjunctionTest() {
final ArrayList<String> list1 = ListUtil.of("a", "b", "b", "c", "d", "x");
final ArrayList<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d", "x2");
final List<String> list1 = ListUtil.of("a", "b", "b", "c", "d", "x");
final List<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d", "x2");
final Collection<String> disjunction = CollUtil.disjunction(list1, list2);
Assert.assertTrue(disjunction.contains("b"));
@ -200,8 +200,8 @@ public class CollUtilTest {
@Test
public void disjunctionTest2() {
// 任意一个集合为空差集为另一个集合
final ArrayList<String> list1 = ListUtil.of();
final ArrayList<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d", "x2");
final List<String> list1 = ListUtil.of();
final List<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d", "x2");
final Collection<String> disjunction = CollUtil.disjunction(list1, list2);
Assert.assertEquals(list2, disjunction);
@ -212,8 +212,8 @@ public class CollUtilTest {
@Test
public void disjunctionTest3() {
// 无交集下返回共同的元素
final ArrayList<String> list1 = ListUtil.of("1", "2", "3");
final ArrayList<String> list2 = ListUtil.of("a", "b", "c");
final List<String> list1 = ListUtil.of("1", "2", "3");
final List<String> list2 = ListUtil.of("a", "b", "c");
final Collection<String> disjunction = CollUtil.disjunction(list1, list2);
Assert.assertTrue(disjunction.contains("1"));
@ -273,7 +273,7 @@ public class CollUtilTest {
map2.put("c", "值3");
// ----------------------------------------------------------------------------------------
final ArrayList<HashMap<String, String>> list = ListUtil.of(map1, map2);
final List<HashMap<String, String>> list = ListUtil.of(map1, map2);
final Map<String, List<String>> map = CollUtil.toListMap(list);
Assert.assertEquals("值1", map.get("a").get(0));
Assert.assertEquals("值2", map.get("a").get(1));
@ -288,7 +288,7 @@ public class CollUtilTest {
public void getFieldValuesTest() {
final Dict v1 = Dict.of().set("id", 12).set("name", "张三").set("age", 23);
final Dict v2 = Dict.of().set("age", 13).set("id", 15).set("name", "李四");
final ArrayList<Dict> list = ListUtil.of(v1, v2);
final List<Dict> list = ListUtil.of(v1, v2);
final List<Object> fieldValues = (List<Object>) CollUtil.getFieldValues(list, "name");
@ -298,7 +298,7 @@ public class CollUtilTest {
@Test
public void splitTest() {
final ArrayList<Integer> list = ListUtil.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
final List<Integer> list = ListUtil.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
final List<List<Integer>> split = CollUtil.split(list, 3);
Assert.assertEquals(3, split.size());
Assert.assertEquals(3, split.get(0).size());
@ -323,7 +323,7 @@ public class CollUtilTest {
@Test
public void editTest() {
final ArrayList<String> list = ListUtil.of("a", "b", "c");
final List<String> list = ListUtil.of("a", "b", "c");
final Collection<String> filtered = CollUtil.edit(list, t -> t + 1);
@ -332,9 +332,9 @@ public class CollUtilTest {
@Test
public void removeTest() {
final ArrayList<String> list = ListUtil.of("a", "b", "c");
final List<String> list = ListUtil.of("a", "b", "c");
final ArrayList<String> filtered = CollUtil.remove(list, "a"::equals);
final List<String> filtered = CollUtil.remove(list, "a"::equals);
// 原地过滤
Assert.assertSame(list, filtered);
@ -351,10 +351,10 @@ public class CollUtilTest {
@Test
public void filterRemoveTest() {
final ArrayList<String> list = ListUtil.of("a", "b", "c");
final List<String> list = ListUtil.of("a", "b", "c");
final List<String> removed = new ArrayList<>();
final ArrayList<String> filtered = CollUtil.remove(list, t -> {
final List<String> filtered = CollUtil.remove(list, t -> {
if ("a".equals(t)) {
removed.add(t);
return true;
@ -372,9 +372,9 @@ public class CollUtilTest {
@Test
public void removeNullTest() {
final ArrayList<String> list = ListUtil.of("a", "b", "c", null, "", " ");
final List<String> list = ListUtil.of("a", "b", "c", null, "", " ");
final ArrayList<String> filtered = CollUtil.removeNull(list);
final List<String> filtered = CollUtil.removeNull(list);
// 原地过滤
Assert.assertSame(list, filtered);
@ -383,9 +383,9 @@ public class CollUtilTest {
@Test
public void removeEmptyTest() {
final ArrayList<String> list = ListUtil.of("a", "b", "c", null, "", " ");
final List<String> list = ListUtil.of("a", "b", "c", null, "", " ");
final ArrayList<String> filtered = CollUtil.removeEmpty(list);
final List<String> filtered = CollUtil.removeEmpty(list);
// 原地过滤
Assert.assertSame(list, filtered);
@ -394,9 +394,9 @@ public class CollUtilTest {
@Test
public void removeBlankTest() {
final ArrayList<String> list = ListUtil.of("a", "b", "c", null, "", " ");
final List<String> list = ListUtil.of("a", "b", "c", null, "", " ");
final ArrayList<String> filtered = CollUtil.removeBlank(list);
final List<String> filtered = CollUtil.removeBlank(list);
// 原地过滤
Assert.assertSame(list, filtered);
@ -731,20 +731,20 @@ public class CollUtilTest {
@Test
public void containsAnyTest() {
final ArrayList<Integer> list1 = ListUtil.of(1, 2, 3, 4, 5);
final ArrayList<Integer> list2 = ListUtil.of(5, 3, 1, 9, 11);
final List<Integer> list1 = ListUtil.of(1, 2, 3, 4, 5);
final List<Integer> list2 = ListUtil.of(5, 3, 1, 9, 11);
Assert.assertTrue(CollUtil.containsAny(list1, list2));
}
@Test
public void containsAllTest() {
final ArrayList<Integer> list1 = ListUtil.of(1, 2, 3, 4, 5);
final ArrayList<Integer> list2 = ListUtil.of(5, 3, 1);
final List<Integer> list1 = ListUtil.of(1, 2, 3, 4, 5);
final List<Integer> list2 = ListUtil.of(5, 3, 1);
Assert.assertTrue(CollUtil.containsAll(list1, list2));
final ArrayList<Integer> list3 = ListUtil.of(1);
final ArrayList<Integer> list4 = ListUtil.of();
final List<Integer> list3 = ListUtil.of(1);
final List<Integer> list4 = ListUtil.of();
Assert.assertTrue(CollUtil.containsAll(list3, list4));
}
@ -799,7 +799,7 @@ public class CollUtilTest {
@Test
public void countMapTest() {
final ArrayList<String> list = ListUtil.of("a", "b", "c", "c", "a", "b", "d");
final List<String> list = ListUtil.of("a", "b", "c", "c", "a", "b", "d");
final Map<String, Integer> countMap = CollUtil.countMap(list);
Assert.assertEquals(Integer.valueOf(2), countMap.get("a"));
@ -810,7 +810,7 @@ public class CollUtilTest {
@Test
public void indexOfTest() {
final ArrayList<String> list = ListUtil.of("a", "b", "c", "c", "a", "b", "d");
final List<String> list = ListUtil.of("a", "b", "c", "c", "a", "b", "d");
final int i = CollUtil.indexOf(list, (str) -> str.charAt(0) == 'c');
Assert.assertEquals(2, i);
}
@ -818,7 +818,7 @@ public class CollUtilTest {
@Test
public void lastIndexOfTest() {
// List有优化
final ArrayList<String> list = ListUtil.of("a", "b", "c", "c", "a", "b", "d");
final List<String> list = ListUtil.of("a", "b", "c", "c", "a", "b", "d");
final int i = CollUtil.lastIndexOf(list, (str) -> str.charAt(0) == 'a');
Assert.assertEquals(4, i);
@ -907,7 +907,7 @@ public class CollUtilTest {
@Test
public void distinctTest() {
final ArrayList<Integer> distinct = CollUtil.distinct(ListUtil.view(5, 3, 10, 9, 0, 5, 10, 9));
final List<Integer> distinct = CollUtil.distinct(ListUtil.view(5, 3, 10, 9, 0, 5, 10, 9));
Assert.assertEquals(ListUtil.view(5, 3, 10, 9, 0), distinct);
}
@ -946,7 +946,7 @@ public class CollUtilTest {
@Test
public void mapTest() {
final ArrayList<String> list = ListUtil.of("a", "b", "c");
final List<String> list = ListUtil.of("a", "b", "c");
final List<Object> extract = CollUtil.map(list, (e) -> e + "_1");
Assert.assertEquals(ListUtil.of("a_1", "b_1", "c_1"), extract);
}

View File

@ -24,13 +24,13 @@ public class IterUtilTest {
@Test
public void getFirstNonNullTest() {
final ArrayList<String> strings = ListUtil.of(null, null, "123", "456", null);
final List<String> strings = ListUtil.of(null, null, "123", "456", null);
Assert.assertEquals("123", CollUtil.getFirstNoneNull(strings));
}
@Test
public void fieldValueMapTest() {
final ArrayList<Car> carList = ListUtil.of(new Car("123", "大众"), new Car("345", "奔驰"), new Car("567", "路虎"));
final List<Car> carList = ListUtil.of(new Car("123", "大众"), new Car("345", "奔驰"), new Car("567", "路虎"));
final Map<String, Car> carNameMap = IterUtil.fieldValueMap(carList.iterator(), "carNumber");
Assert.assertEquals("大众", carNameMap.get("123").getCarName());
@ -40,30 +40,30 @@ public class IterUtilTest {
@Test
public void joinTest() {
final ArrayList<String> list = ListUtil.of("1", "2", "3", "4");
final List<String> list = ListUtil.of("1", "2", "3", "4");
final String join = IterUtil.join(list.iterator(), ":");
Assert.assertEquals("1:2:3:4", join);
final ArrayList<Integer> list1 = ListUtil.of(1, 2, 3, 4);
final List<Integer> list1 = ListUtil.of(1, 2, 3, 4);
final String join1 = IterUtil.join(list1.iterator(), ":");
Assert.assertEquals("1:2:3:4", join1);
// 包装每个节点
final ArrayList<String> list2 = ListUtil.of("1", "2", "3", "4");
final List<String> list2 = ListUtil.of("1", "2", "3", "4");
final String join2 = IterUtil.join(list2.iterator(), ":", "\"", "\"");
Assert.assertEquals("\"1\":\"2\":\"3\":\"4\"", join2);
}
@Test
public void joinWithFuncTest() {
final ArrayList<String> list = ListUtil.of("1", "2", "3", "4");
final List<String> list = ListUtil.of("1", "2", "3", "4");
final String join = IterUtil.join(list.iterator(), ":", String::valueOf);
Assert.assertEquals("1:2:3:4", join);
}
@Test
public void joinWithNullTest() {
final ArrayList<String> list = ListUtil.of("1", null, "3", "4");
final List<String> list = ListUtil.of("1", null, "3", "4");
final String join = IterUtil.join(list.iterator(), ":", String::valueOf);
Assert.assertEquals("1:null:3:4", join);
}

View File

@ -11,7 +11,7 @@ import java.util.List;
public class PartitionTest {
@Test
public void sizeTest() {
final ArrayList<Integer> list = ListUtil.of(1, 2, 3, 4, 5);
final List<Integer> list = ListUtil.of(1, 2, 3, 4, 5);
final Partition<Integer> partition = new Partition<>(list, 4);
Assert.assertEquals(2, partition.size());
}

View File

@ -22,6 +22,7 @@ import java.io.PushbackReader;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
public class IoUtilTest {
@ -50,7 +51,7 @@ public class IoUtilTest {
@Test
public void readUtf8LinesTest() {
final ArrayList<String> strings = IoUtil.readUtf8Lines(ResourceUtil.getStream("text.txt"), ListUtil.of());
final List<String> strings = IoUtil.readUtf8Lines(ResourceUtil.getStream("text.txt"), ListUtil.of());
Assert.assertEquals(3, strings.size());
}

View File

@ -5,10 +5,7 @@ import cn.hutool.core.collection.SetUtil;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -40,7 +37,7 @@ public class StreamUtilTest {
@Test
public void streamTestOrdinaryIterator() {
final ArrayList<Integer> arrayList = ListUtil.of(1, 2, 3);
final List<Integer> arrayList = ListUtil.of(1, 2, 3);
Assert.assertArrayEquals(new Integer[]{1, 2, 3}, StreamUtil.ofIter(arrayList.iterator()).toArray());
final HashSet<Integer> hashSet = SetUtil.of(1, 2, 3);

View File

@ -5,10 +5,7 @@ import org.junit.Assert;
import org.junit.Test;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Map;
import java.util.Objects;
import java.util.*;
/**
* {@link ArrayUtil} 数组工具单元测试
@ -305,7 +302,7 @@ public class ArrayUtilTest {
@Test
public void toArrayTest() {
final ArrayList<String> list = ListUtil.of("A", "B", "C", "D");
final List<String> list = ListUtil.of("A", "B", "C", "D");
final String[] array = ArrayUtil.toArray(list, String.class);
Assert.assertEquals("A", array[0]);
Assert.assertEquals("B", array[1]);

View File

@ -85,7 +85,7 @@ public class ReUtilTest {
public void findAllTest() {
// 查找所有匹配文本
final List<String> resultFindAll = ReUtil.findAll("\\w{2}", content, 0, new ArrayList<>());
final ArrayList<String> expected = ListUtil.of("ZZ", "Za", "aa", "bb", "bc", "cc", "12", "34");
final List<String> expected = ListUtil.of("ZZ", "Za", "aa", "bb", "bc", "cc", "12", "34");
Assert.assertEquals(expected, resultFindAll);
}

View File

@ -24,6 +24,7 @@ import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@ -555,7 +556,7 @@ public abstract class AbstractDb<R extends AbstractDb<R>> extends DefaultConnect
* @throws DbRuntimeException SQL执行异常
*/
public <T> T find(final Entity where, final RsHandler<T> rsh, final String... fields) throws DbRuntimeException {
return find(ListUtil.of(fields), where, rsh);
return find(Arrays.asList(fields), where, rsh);
}
/**

View File

@ -14,11 +14,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
/**
* 分组化的Set集合类<br>
@ -279,7 +275,7 @@ public class GroupedSet extends HashMap<String, LinkedHashSet<String>> {
public boolean contains(final String group, final String value, final String... otherValues) {
if (ArrayUtil.isNotEmpty(otherValues)) {
// 需要测试多个值的情况
final List<String> valueList = ListUtil.of(otherValues);
final List<String> valueList = Arrays.asList(otherValues);
valueList.add(value);
return contains(group, valueList);
} else {