This commit is contained in:
Looly 2025-01-16 00:08:10 +08:00
parent 779a95c53a
commit f6dad69c7f
2 changed files with 158 additions and 140 deletions

View File

@ -409,11 +409,18 @@ public class CollUtil {
} }
Collection<T> result = ObjUtil.clone(coll1); Collection<T> result = ObjUtil.clone(coll1);
if (null == result) { try {
result = CollUtil.create(coll1.getClass()); if (null == result) {
result = CollUtil.create(coll1.getClass());
result.addAll(coll1);
}
result.removeAll(coll2);
} catch (UnsupportedOperationException e) {
// 针对 coll1 为只读集合的补偿
result = CollUtil.create(AbstractCollection.class);
result.addAll(coll1); result.addAll(coll1);
result.removeAll(coll2);
} }
result.removeAll(coll2);
return result; return result;
} }

View File

@ -31,8 +31,7 @@ import org.junit.jupiter.api.Test;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertTrue;
/** /**
* 集合工具类单元测试 * 集合工具类单元测试
@ -46,11 +45,11 @@ public class CollUtilTest {
public void emptyIfNullTest() { public void emptyIfNullTest() {
final Set<?> set = null; final Set<?> set = null;
final Set<?> set1 = CollUtil.emptyIfNull(set); final Set<?> set1 = CollUtil.emptyIfNull(set);
Assertions.assertEquals(SetUtil.empty(), set1); assertEquals(SetUtil.empty(), set1);
final List<?> list = null; final List<?> list = null;
final List<?> list1 = CollUtil.emptyIfNull(list); final List<?> list1 = CollUtil.emptyIfNull(list);
Assertions.assertEquals(ListUtil.empty(), list1); assertEquals(ListUtil.empty(), list1);
} }
@SuppressWarnings("ConstantConditions") @SuppressWarnings("ConstantConditions")
@ -72,16 +71,16 @@ public class CollUtilTest {
@Test @Test
public void defaultIfEmpty() { public void defaultIfEmpty() {
List<String> strings = CollUtil.defaultIfEmpty(ListUtil.of(), ListUtil.of("1")); List<String> strings = CollUtil.defaultIfEmpty(ListUtil.of(), ListUtil.of("1"));
Assertions.assertEquals(ListUtil.of("1"), strings); assertEquals(ListUtil.of("1"), strings);
strings = CollUtil.defaultIfEmpty(null, ListUtil.of("1")); strings = CollUtil.defaultIfEmpty(null, ListUtil.of("1"));
Assertions.assertEquals(ListUtil.of("1"), strings); assertEquals(ListUtil.of("1"), strings);
} }
@Test @Test
public void defaultIfEmpty2() { public void defaultIfEmpty2() {
final List<String> strings = CollUtil.defaultIfEmpty(ListUtil.of(), Function.identity(), () -> ListUtil.of("1")); final List<String> strings = CollUtil.defaultIfEmpty(ListUtil.of(), Function.identity(), () -> ListUtil.of("1"));
Assertions.assertEquals(ListUtil.of("1"), strings); assertEquals(ListUtil.of("1"), strings);
} }
@Test @Test
@ -98,14 +97,14 @@ public class CollUtilTest {
final List<Integer> exceptResultList = ListUtil.of(1); final List<Integer> exceptResultList = ListUtil.of(1);
List<Integer> resultList = CollUtil.removeWithAddIf(list, ele -> 1 == ele); List<Integer> resultList = CollUtil.removeWithAddIf(list, ele -> 1 == ele);
Assertions.assertEquals(list, exceptRemovedList); assertEquals(list, exceptRemovedList);
Assertions.assertEquals(resultList, exceptResultList); assertEquals(resultList, exceptResultList);
list = ListUtil.of(1, 2, 3); list = ListUtil.of(1, 2, 3);
resultList = new ArrayList<>(); resultList = new ArrayList<>();
CollUtil.removeWithAddIf(list, resultList, ele -> 1 == ele); CollUtil.removeWithAddIf(list, resultList, ele -> 1 == ele);
Assertions.assertEquals(list, exceptRemovedList); assertEquals(list, exceptRemovedList);
Assertions.assertEquals(resultList, exceptResultList); assertEquals(resultList, exceptResultList);
} }
@Test @Test
@ -114,17 +113,17 @@ public class CollUtilTest {
List<String> answerList = ListUtil.of("a", "b"); List<String> answerList = ListUtil.of("a", "b");
CollUtil.padLeft(srcList, 1, "b"); CollUtil.padLeft(srcList, 1, "b");
CollUtil.padLeft(srcList, 2, "a"); CollUtil.padLeft(srcList, 2, "a");
Assertions.assertEquals(srcList, answerList); assertEquals(srcList, answerList);
srcList = ListUtil.of("a", "b"); srcList = ListUtil.of("a", "b");
answerList = ListUtil.of("a", "b"); answerList = ListUtil.of("a", "b");
CollUtil.padLeft(srcList, 2, "a"); CollUtil.padLeft(srcList, 2, "a");
Assertions.assertEquals(srcList, answerList); assertEquals(srcList, answerList);
srcList = ListUtil.of("c"); srcList = ListUtil.of("c");
answerList = ListUtil.of("a", "a", "c"); answerList = ListUtil.of("a", "a", "c");
CollUtil.padLeft(srcList, 3, "a"); CollUtil.padLeft(srcList, 3, "a");
Assertions.assertEquals(srcList, answerList); assertEquals(srcList, answerList);
} }
@Test @Test
@ -132,7 +131,7 @@ public class CollUtilTest {
final List<String> srcList = ListUtil.of("a"); final List<String> srcList = ListUtil.of("a");
final List<String> answerList = ListUtil.of("a", "b", "b", "b", "b"); final List<String> answerList = ListUtil.of("a", "b", "b", "b", "b");
CollUtil.padRight(srcList, 5, "b"); CollUtil.padRight(srcList, 5, "b");
Assertions.assertEquals(srcList, answerList); assertEquals(srcList, answerList);
} }
@SuppressWarnings("ConstantValue") @SuppressWarnings("ConstantValue")
@ -154,7 +153,7 @@ public class CollUtilTest {
final Collection<String> union = CollUtil.union(list1, list2); final Collection<String> union = CollUtil.union(list1, list2);
Assertions.assertEquals(3, CollUtil.count(union, "b"::equals)); assertEquals(3, CollUtil.count(union, "b"::equals));
} }
@Test @Test
@ -163,8 +162,8 @@ public class CollUtilTest {
final List<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d"); final List<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d");
final Collection<String> intersection = CollUtil.intersection(list1, list2); final Collection<String> intersection = CollUtil.intersection(list1, list2);
Assertions.assertEquals(2, CollUtil.count(intersection, "b"::equals)); assertEquals(2, CollUtil.count(intersection, "b"::equals));
Assertions.assertEquals(0, CollUtil.count(intersection, "x"::equals)); assertEquals(0, CollUtil.count(intersection, "x"::equals));
} }
@Test @Test
@ -174,7 +173,7 @@ public class CollUtilTest {
final List<String> list3 = ListUtil.of(); final List<String> list3 = ListUtil.of();
final Collection<String> intersectionDistinct = CollUtil.intersectionDistinct(list1, list2); final Collection<String> intersectionDistinct = CollUtil.intersectionDistinct(list1, list2);
Assertions.assertEquals(SetUtil.ofLinked("a", "b", "c", "d"), intersectionDistinct); assertEquals(SetUtil.ofLinked("a", "b", "c", "d"), intersectionDistinct);
final Collection<String> intersectionDistinct2 = CollUtil.intersectionDistinct(list1, list2, list3); final Collection<String> intersectionDistinct2 = CollUtil.intersectionDistinct(list1, list2, list3);
Console.log(intersectionDistinct2); Console.log(intersectionDistinct2);
@ -204,9 +203,9 @@ public class CollUtilTest {
final List<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d", "x2"); final List<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d", "x2");
final Collection<String> disjunction = CollUtil.disjunction(list1, list2); final Collection<String> disjunction = CollUtil.disjunction(list1, list2);
Assertions.assertEquals(list2, disjunction); assertEquals(list2, disjunction);
final Collection<String> disjunction2 = CollUtil.disjunction(list2, list1); final Collection<String> disjunction2 = CollUtil.disjunction(list2, list1);
Assertions.assertEquals(list2, disjunction2); assertEquals(list2, disjunction2);
} }
@Test @Test
@ -236,8 +235,8 @@ public class CollUtilTest {
final List<String> list1 = ListUtil.of("a", "b", "b", "c", "d", "x"); 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 List<String> list2 = ListUtil.of("a", "b", "b", "b", "c", "d", "x2");
final Collection<String> subtract = CollUtil.subtract(list1, list2); final Collection<String> subtract = CollUtil.subtract(list1, list2);
Assertions.assertEquals(1, subtract.size()); assertEquals(1, subtract.size());
Assertions.assertEquals("x", subtract.iterator().next()); assertEquals("x", subtract.iterator().next());
} }
@Test @Test
@ -248,7 +247,7 @@ public class CollUtilTest {
map1.put("2", "v2"); map1.put("2", "v2");
map2.put("2", "v2"); map2.put("2", "v2");
final Collection<String> r2 = CollUtil.subtract(map1.keySet(), map2.keySet()); final Collection<String> r2 = CollUtil.subtract(map1.keySet(), map2.keySet());
Assertions.assertEquals("[1]", r2.toString()); assertEquals("[1]", r2.toString());
} }
@Test @Test
@ -259,7 +258,7 @@ public class CollUtilTest {
map1.put("2", "v2"); map1.put("2", "v2");
map2.put("2", "v2"); map2.put("2", "v2");
final List<String> r2 = CollUtil.subtractToList(map1.keySet(), map2.keySet()); final List<String> r2 = CollUtil.subtractToList(map1.keySet(), map2.keySet());
Assertions.assertEquals("[1]", r2.toString()); assertEquals("[1]", r2.toString());
} }
@Test @Test
@ -275,13 +274,13 @@ public class CollUtilTest {
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
final List<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); final Map<String, List<String>> map = CollUtil.toListMap(list);
Assertions.assertEquals("值1", map.get("a").get(0)); assertEquals("值1", map.get("a").get(0));
Assertions.assertEquals("值2", map.get("a").get(1)); assertEquals("值2", map.get("a").get(1));
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
final List<Map<String, String>> listMap = CollUtil.toMapList(map); final List<Map<String, String>> listMap = CollUtil.toMapList(map);
Assertions.assertEquals("值1", listMap.get(0).get("a")); assertEquals("值1", listMap.get(0).get("a"));
Assertions.assertEquals("值2", listMap.get(1).get("a")); assertEquals("值2", listMap.get(1).get("a"));
} }
@Test @Test
@ -292,24 +291,24 @@ public class CollUtilTest {
final List<Object> fieldValues = (List<Object>) CollUtil.getFieldValues(list, "name"); final List<Object> fieldValues = (List<Object>) CollUtil.getFieldValues(list, "name");
Assertions.assertEquals("张三", fieldValues.get(0)); assertEquals("张三", fieldValues.get(0));
Assertions.assertEquals("李四", fieldValues.get(1)); assertEquals("李四", fieldValues.get(1));
} }
@Test @Test
public void partitionTest() { public void partitionTest() {
final List<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.partition(list, 3); final List<List<Integer>> split = CollUtil.partition(list, 3);
Assertions.assertEquals(3, split.size()); assertEquals(3, split.size());
Assertions.assertEquals(3, split.get(0).size()); assertEquals(3, split.get(0).size());
} }
@Test @Test
public void partitionTest2() { public void partitionTest2() {
final ArrayList<Integer> list = ListUtil.of(1, 2, 3, 4, 5, 6, 7, 8, 9); final ArrayList<Integer> list = ListUtil.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
final List<List<Integer>> split = CollUtil.partition(list, Integer.MAX_VALUE); final List<List<Integer>> split = CollUtil.partition(list, Integer.MAX_VALUE);
Assertions.assertEquals(1, split.size()); assertEquals(1, split.size());
Assertions.assertEquals(9, split.get(0).size()); assertEquals(9, split.get(0).size());
} }
@Test @Test
@ -326,7 +325,7 @@ public class CollUtilTest {
result[0] = value; result[0] = value;
} }
}); });
Assertions.assertEquals("1", result[0]); assertEquals("1", result[0]);
} }
@Test @Test
@ -335,7 +334,7 @@ public class CollUtilTest {
final Collection<String> filtered = CollUtil.edit(list, t -> t + 1); final Collection<String> filtered = CollUtil.edit(list, t -> t + 1);
Assertions.assertEquals(ListUtil.of("a1", "b1", "c1"), filtered); assertEquals(ListUtil.of("a1", "b1", "c1"), filtered);
} }
@Test @Test
@ -346,7 +345,7 @@ public class CollUtilTest {
// 原地过滤 // 原地过滤
Assertions.assertSame(list, filtered); Assertions.assertSame(list, filtered);
Assertions.assertEquals(ListUtil.of("b", "c"), filtered); assertEquals(ListUtil.of("b", "c"), filtered);
} }
@Test @Test
@ -354,7 +353,7 @@ public class CollUtilTest {
final Set<String> set = SetUtil.ofLinked("a", "b", "", " ", "c"); final Set<String> set = SetUtil.ofLinked("a", "b", "", " ", "c");
final Set<String> filtered = CollUtil.remove(set, StrUtil::isBlank); final Set<String> filtered = CollUtil.remove(set, StrUtil::isBlank);
Assertions.assertEquals(SetUtil.ofLinked("a", "b", "c"), filtered); assertEquals(SetUtil.ofLinked("a", "b", "c"), filtered);
} }
@Test @Test
@ -370,12 +369,12 @@ public class CollUtilTest {
return false; return false;
}); });
Assertions.assertEquals(1, removed.size()); assertEquals(1, removed.size());
Assertions.assertEquals("a", removed.get(0)); assertEquals("a", removed.get(0));
// 原地过滤 // 原地过滤
Assertions.assertSame(list, filtered); Assertions.assertSame(list, filtered);
Assertions.assertEquals(ListUtil.of("b", "c"), filtered); assertEquals(ListUtil.of("b", "c"), filtered);
} }
@Test @Test
@ -386,7 +385,7 @@ public class CollUtilTest {
// 原地过滤 // 原地过滤
Assertions.assertSame(list, filtered); Assertions.assertSame(list, filtered);
Assertions.assertEquals(ListUtil.of("a", "b", "c", "", " "), filtered); assertEquals(ListUtil.of("a", "b", "c", "", " "), filtered);
} }
@Test @Test
@ -397,7 +396,7 @@ public class CollUtilTest {
// 原地过滤 // 原地过滤
Assertions.assertSame(list, filtered); Assertions.assertSame(list, filtered);
Assertions.assertEquals(ListUtil.of("a", "b", "c", " "), filtered); assertEquals(ListUtil.of("a", "b", "c", " "), filtered);
} }
@Test @Test
@ -408,7 +407,7 @@ public class CollUtilTest {
// 原地过滤 // 原地过滤
Assertions.assertSame(list, filtered); Assertions.assertSame(list, filtered);
Assertions.assertEquals(ListUtil.of("a", "b", "c"), filtered); assertEquals(ListUtil.of("a", "b", "c"), filtered);
} }
@Test @Test
@ -421,38 +420,38 @@ public class CollUtilTest {
// 按照奇数偶数分类 // 按照奇数偶数分类
return Integer.parseInt(t) % 2; return Integer.parseInt(t) % 2;
}); });
Assertions.assertEquals(ListUtil.of("2", "4", "6"), group2.get(0)); assertEquals(ListUtil.of("2", "4", "6"), group2.get(0));
Assertions.assertEquals(ListUtil.of("1", "3", "5"), group2.get(1)); assertEquals(ListUtil.of("1", "3", "5"), group2.get(1));
} }
@Test @Test
public void groupByFieldTest() { public void groupByFieldTest() {
final List<TestBean> list = ListUtil.of(new TestBean("张三", 12), new TestBean("李四", 13), new TestBean("王五", 12)); final List<TestBean> list = ListUtil.of(new TestBean("张三", 12), new TestBean("李四", 13), new TestBean("王五", 12));
final List<List<TestBean>> groupByField = CollUtil.groupByField(list, "age"); final List<List<TestBean>> groupByField = CollUtil.groupByField(list, "age");
Assertions.assertEquals("张三", groupByField.get(0).get(0).getName()); assertEquals("张三", groupByField.get(0).get(0).getName());
Assertions.assertEquals("王五", groupByField.get(0).get(1).getName()); assertEquals("王五", groupByField.get(0).get(1).getName());
Assertions.assertEquals("李四", groupByField.get(1).get(0).getName()); assertEquals("李四", groupByField.get(1).get(0).getName());
} }
@Test @Test
public void groupByFuncTest() { public void groupByFuncTest() {
final List<TestBean> list = ListUtil.of(new TestBean("张三", 12), new TestBean("李四", 13), new TestBean("王五", 12)); final List<TestBean> list = ListUtil.of(new TestBean("张三", 12), new TestBean("李四", 13), new TestBean("王五", 12));
final List<List<TestBean>> groupByField = CollUtil.groupByFunc(list, TestBean::getAge); final List<List<TestBean>> groupByField = CollUtil.groupByFunc(list, TestBean::getAge);
Assertions.assertEquals("张三", groupByField.get(0).get(0).getName()); assertEquals("张三", groupByField.get(0).get(0).getName());
Assertions.assertEquals("王五", groupByField.get(0).get(1).getName()); assertEquals("王五", groupByField.get(0).get(1).getName());
Assertions.assertEquals("李四", groupByField.get(1).get(0).getName()); assertEquals("李四", groupByField.get(1).get(0).getName());
} }
@Test @Test
public void groupByFunc2Test() { public void groupByFunc2Test() {
final List<TestBean> list = ListUtil.of(new TestBean("张三", 12), new TestBean("李四", 13), new TestBean("王五", 12)); final List<TestBean> list = ListUtil.of(new TestBean("张三", 12), new TestBean("李四", 13), new TestBean("王五", 12));
final List<List<TestBean>> groupByField = CollUtil.groupByFunc(list, a -> a.getAge() > 12); final List<List<TestBean>> groupByField = CollUtil.groupByFunc(list, a -> a.getAge() > 12);
Assertions.assertEquals("张三", groupByField.get(0).get(0).getName()); assertEquals("张三", groupByField.get(0).get(0).getName());
Assertions.assertEquals("王五", groupByField.get(0).get(1).getName()); assertEquals("王五", groupByField.get(0).get(1).getName());
Assertions.assertEquals("李四", groupByField.get(1).get(0).getName()); assertEquals("李四", groupByField.get(1).get(0).getName());
} }
@Test @Test
@ -464,9 +463,9 @@ public class CollUtilTest {
); );
CollUtil.sortByProperty(list, "createTime"); CollUtil.sortByProperty(list, "createTime");
Assertions.assertEquals("李四", list.get(0).getName()); assertEquals("李四", list.get(0).getName());
Assertions.assertEquals("王五", list.get(1).getName()); assertEquals("王五", list.get(1).getName());
Assertions.assertEquals("张三", list.get(2).getName()); assertEquals("张三", list.get(2).getName());
} }
@Test @Test
@ -478,9 +477,9 @@ public class CollUtilTest {
); );
CollUtil.sortByProperty(list, "age"); CollUtil.sortByProperty(list, "age");
Assertions.assertEquals("李四", list.get(0).getName()); assertEquals("李四", list.get(0).getName());
Assertions.assertEquals("张三", list.get(1).getName()); assertEquals("张三", list.get(1).getName());
Assertions.assertEquals("王五", list.get(2).getName()); assertEquals("王五", list.get(2).getName());
} }
@Test @Test
@ -491,9 +490,9 @@ public class CollUtilTest {
); );
final Map<String, TestBean> map = CollUtil.fieldValueMap(list, "name"); final Map<String, TestBean> map = CollUtil.fieldValueMap(list, "name");
Assertions.assertEquals("李四", map.get("李四").getName()); assertEquals("李四", map.get("李四").getName());
Assertions.assertEquals("王五", map.get("王五").getName()); assertEquals("王五", map.get("王五").getName());
Assertions.assertEquals("张三", map.get("张三").getName()); assertEquals("张三", map.get("张三").getName());
} }
@Test @Test
@ -504,21 +503,21 @@ public class CollUtilTest {
); );
final Map<String, Integer> map = CollUtil.fieldValueAsMap(list, "name", "age"); final Map<String, Integer> map = CollUtil.fieldValueAsMap(list, "name", "age");
Assertions.assertEquals(Integer.valueOf(12), map.get("张三")); assertEquals(Integer.valueOf(12), map.get("张三"));
Assertions.assertEquals(Integer.valueOf(13), map.get("李四")); assertEquals(Integer.valueOf(13), map.get("李四"));
Assertions.assertEquals(Integer.valueOf(14), map.get("王五")); assertEquals(Integer.valueOf(14), map.get("王五"));
} }
@Test @Test
public void emptyTest() { public void emptyTest() {
final SortedSet<String> emptySortedSet = CollUtil.empty(SortedSet.class); final SortedSet<String> emptySortedSet = CollUtil.empty(SortedSet.class);
Assertions.assertEquals(Collections.emptySortedSet(), emptySortedSet); assertEquals(Collections.emptySortedSet(), emptySortedSet);
final Set<String> emptySet = CollUtil.empty(Set.class); final Set<String> emptySet = CollUtil.empty(Set.class);
Assertions.assertEquals(Collections.emptySet(), emptySet); assertEquals(Collections.emptySet(), emptySet);
final List<String> emptyList = CollUtil.empty(List.class); final List<String> emptyList = CollUtil.empty(List.class);
Assertions.assertEquals(Collections.emptyList(), emptyList); assertEquals(Collections.emptyList(), emptyList);
} }
@Data @Data
@ -547,8 +546,8 @@ public class CollUtilTest {
public void listTest2() { public void listTest2() {
final List<String> list1 = ListUtil.of("a", "b", "c"); final List<String> list1 = ListUtil.of("a", "b", "c");
final List<String> list2 = ListUtil.ofLinked("a", "b", "c"); final List<String> list2 = ListUtil.ofLinked("a", "b", "c");
Assertions.assertEquals("[a, b, c]", list1.toString()); assertEquals("[a, b, c]", list1.toString());
Assertions.assertEquals("[a, b, c]", list2.toString()); assertEquals("[a, b, c]", list2.toString());
} }
@Test @Test
@ -560,18 +559,18 @@ public class CollUtilTest {
final List<String> list1 = ListUtil.of(false, set); final List<String> list1 = ListUtil.of(false, set);
final List<String> list2 = ListUtil.of(true, set); final List<String> list2 = ListUtil.of(true, set);
Assertions.assertEquals("[a, b, c]", list1.toString()); assertEquals("[a, b, c]", list1.toString());
Assertions.assertEquals("[a, b, c]", list2.toString()); assertEquals("[a, b, c]", list2.toString());
} }
@Test @Test
public void getTest() { public void getTest() {
final HashSet<String> set = SetUtil.ofLinked("A", "B", "C", "D"); final HashSet<String> set = SetUtil.ofLinked("A", "B", "C", "D");
String str = CollUtil.get(set, 2); String str = CollUtil.get(set, 2);
Assertions.assertEquals("C", str); assertEquals("C", str);
str = CollUtil.get(set, -1); str = CollUtil.get(set, -1);
Assertions.assertEquals("D", str); assertEquals("D", str);
} }
@Test @Test
@ -587,7 +586,7 @@ public class CollUtilTest {
// Assert result // Assert result
final List<Integer> arrayList = new ArrayList<>(); final List<Integer> arrayList = new ArrayList<>();
arrayList.add(null); arrayList.add(null);
Assertions.assertEquals(arrayList, retval); assertEquals(arrayList, retval);
} }
@Test @Test
@ -604,7 +603,7 @@ public class CollUtilTest {
// Assert result // Assert result
final List<Integer> arrayList = new ArrayList<>(); final List<Integer> arrayList = new ArrayList<>();
arrayList.add(null); arrayList.add(null);
Assertions.assertEquals(arrayList, retval); assertEquals(arrayList, retval);
} }
@Test @Test
@ -619,7 +618,7 @@ public class CollUtilTest {
// Assert result // Assert result
final List<Integer> arrayList = new ArrayList<>(); final List<Integer> arrayList = new ArrayList<>();
Assertions.assertEquals(arrayList, retval); assertEquals(arrayList, retval);
} }
@Test @Test
@ -647,7 +646,7 @@ public class CollUtilTest {
final List<Integer> retval = CollUtil.sub(list, start, end, step); final List<Integer> retval = CollUtil.sub(list, start, end, step);
// Assert result // Assert result
final List<Integer> arrayList = new ArrayList<>(); final List<Integer> arrayList = new ArrayList<>();
Assertions.assertEquals(arrayList, retval); assertEquals(arrayList, retval);
} }
@Test @Test
@ -662,7 +661,7 @@ public class CollUtilTest {
final List<Integer> retval = CollUtil.sub(list, start, end, step); final List<Integer> retval = CollUtil.sub(list, start, end, step);
// Assert result // Assert result
final List<Integer> arrayList = new ArrayList<>(); final List<Integer> arrayList = new ArrayList<>();
Assertions.assertEquals(arrayList, retval); assertEquals(arrayList, retval);
} }
@Test @Test
@ -706,7 +705,7 @@ public class CollUtilTest {
final List<Integer> retval = CollUtil.sub(list, start, end, step); final List<Integer> retval = CollUtil.sub(list, start, end, step);
// Assert result // Assert result
final List<Integer> arrayList = new ArrayList<>(); final List<Integer> arrayList = new ArrayList<>();
Assertions.assertEquals(arrayList, retval); assertEquals(arrayList, retval);
} }
@Test @Test
@ -721,7 +720,7 @@ public class CollUtilTest {
final List<Integer> retval = CollUtil.sub(list, start, end, step); final List<Integer> retval = CollUtil.sub(list, start, end, step);
// Assert result // Assert result
final List<Integer> arrayList = new ArrayList<>(); final List<Integer> arrayList = new ArrayList<>();
Assertions.assertEquals(arrayList, retval); assertEquals(arrayList, retval);
} }
@Test @Test
@ -736,7 +735,7 @@ public class CollUtilTest {
final List<Integer> retval = CollUtil.sub(list, start, end, step); final List<Integer> retval = CollUtil.sub(list, start, end, step);
// Assert result // Assert result
final List<Integer> arrayList = new ArrayList<>(); final List<Integer> arrayList = new ArrayList<>();
Assertions.assertEquals(arrayList, retval); assertEquals(arrayList, retval);
} }
@Test @Test
@ -756,7 +755,7 @@ public class CollUtilTest {
final List<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<Integer> sortPageAll = CollUtil.sortPageAll(1, 5, Comparator.reverseOrder(), list); final List<Integer> sortPageAll = CollUtil.sortPageAll(1, 5, Comparator.reverseOrder(), list);
Assertions.assertEquals(ListUtil.of(4, 3, 2, 1), sortPageAll); assertEquals(ListUtil.of(4, 3, 2, 1), sortPageAll);
} }
@Test @Test
@ -793,22 +792,22 @@ public class CollUtilTest {
final Map<String, Integer> map = CollUtil.zip(keys, values); final Map<String, Integer> map = CollUtil.zip(keys, values);
Assertions.assertEquals(4, Objects.requireNonNull(map).size()); assertEquals(4, Objects.requireNonNull(map).size());
Assertions.assertEquals(1, map.get("a").intValue()); assertEquals(1, map.get("a").intValue());
Assertions.assertEquals(2, map.get("b").intValue()); assertEquals(2, map.get("b").intValue());
Assertions.assertEquals(3, map.get("c").intValue()); assertEquals(3, map.get("c").intValue());
Assertions.assertEquals(4, map.get("d").intValue()); assertEquals(4, map.get("d").intValue());
} }
@Test @Test
public void toMapTest() { public void toMapTest() {
final Collection<String> keys = ListUtil.of("a", "b", "c", "d"); final Collection<String> keys = ListUtil.of("a", "b", "c", "d");
final Map<String, String> map = IterUtil.toMap(keys, (value) -> "key" + value); final Map<String, String> map = IterUtil.toMap(keys, (value) -> "key" + value);
Assertions.assertEquals("a", map.get("keya")); assertEquals("a", map.get("keya"));
Assertions.assertEquals("b", map.get("keyb")); assertEquals("b", map.get("keyb"));
Assertions.assertEquals("c", map.get("keyc")); assertEquals("c", map.get("keyc"));
Assertions.assertEquals("d", map.get("keyd")); assertEquals("d", map.get("keyd"));
} }
@Test @Test
@ -822,9 +821,9 @@ public class CollUtilTest {
Map.Entry::getKey, Map.Entry::getKey,
entry -> Long.parseLong(entry.getValue())); entry -> Long.parseLong(entry.getValue()));
Assertions.assertEquals(1L, (long) map.get("a")); assertEquals(1L, (long) map.get("a"));
Assertions.assertEquals(12L, (long) map.get("b")); assertEquals(12L, (long) map.get("b"));
Assertions.assertEquals(134L, (long) map.get("c")); assertEquals(134L, (long) map.get("c"));
} }
@Test @Test
@ -832,17 +831,17 @@ public class CollUtilTest {
final List<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); final Map<String, Integer> countMap = CollUtil.countMap(list);
Assertions.assertEquals(Integer.valueOf(2), countMap.get("a")); assertEquals(Integer.valueOf(2), countMap.get("a"));
Assertions.assertEquals(Integer.valueOf(2), countMap.get("b")); assertEquals(Integer.valueOf(2), countMap.get("b"));
Assertions.assertEquals(Integer.valueOf(2), countMap.get("c")); assertEquals(Integer.valueOf(2), countMap.get("c"));
Assertions.assertEquals(Integer.valueOf(1), countMap.get("d")); assertEquals(Integer.valueOf(1), countMap.get("d"));
} }
@Test @Test
public void indexOfTest() { public void indexOfTest() {
final List<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'); final int i = CollUtil.indexOf(list, (str) -> str.charAt(0) == 'c');
Assertions.assertEquals(2, i); assertEquals(2, i);
} }
@Test @Test
@ -850,13 +849,13 @@ public class CollUtilTest {
// List有优化 // List有优化
final List<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'); final int i = CollUtil.lastIndexOf(list, (str) -> str.charAt(0) == 'a');
Assertions.assertEquals(4, i); assertEquals(4, i);
final Queue<Integer> set = new ArrayDeque<>(Arrays.asList(1, 2, 3, 3, 2, 1)); final Queue<Integer> set = new ArrayDeque<>(Arrays.asList(1, 2, 3, 3, 2, 1));
Assertions.assertEquals(5, CollUtil.lastIndexOf(set, num -> num.equals(1))); assertEquals(5, CollUtil.lastIndexOf(set, num -> num.equals(1)));
Assertions.assertEquals(4, CollUtil.lastIndexOf(set, num -> num.equals(2))); assertEquals(4, CollUtil.lastIndexOf(set, num -> num.equals(2)));
Assertions.assertEquals(3, CollUtil.lastIndexOf(set, num -> num.equals(3))); assertEquals(3, CollUtil.lastIndexOf(set, num -> num.equals(3)));
Assertions.assertEquals(-1, CollUtil.lastIndexOf(set, num -> num.equals(4))); assertEquals(-1, CollUtil.lastIndexOf(set, num -> num.equals(4)));
} }
@Test @Test
@ -864,7 +863,7 @@ public class CollUtilTest {
final Set<String> list = SetUtil.ofLinked("a", "b", "c", "c", "a", "b", "d"); final Set<String> list = SetUtil.ofLinked("a", "b", "c", "c", "a", "b", "d");
// 去重后c排第三 // 去重后c排第三
final int i = CollUtil.lastIndexOf(list, (str) -> str.charAt(0) == 'c'); final int i = CollUtil.lastIndexOf(list, (str) -> str.charAt(0) == 'c');
Assertions.assertEquals(2, i); assertEquals(2, i);
} }
@Test @Test
@ -874,7 +873,7 @@ public class CollUtilTest {
objects.add(Dict.of().set("name", "姓名:" + i)); objects.add(Dict.of().set("name", "姓名:" + i));
} }
Assertions.assertEquals(0, ListUtil.page(objects, 3, 5).size()); assertEquals(0, ListUtil.page(objects, 3, 5).size());
} }
@Test @Test
@ -883,15 +882,15 @@ public class CollUtilTest {
final List<Long> list2 = Arrays.asList(2L, 3L); final List<Long> list2 = Arrays.asList(2L, 3L);
final List<Long> result = CollUtil.subtractToList(list1, list2); final List<Long> result = CollUtil.subtractToList(list1, list2);
Assertions.assertEquals(1, result.size()); assertEquals(1, result.size());
Assertions.assertEquals(1L, (long) result.get(0)); assertEquals(1L, (long) result.get(0));
} }
@Test @Test
public void sortNaturalTest() { public void sortNaturalTest() {
final List<String> of = ListUtil.of("a", "c", "b"); final List<String> of = ListUtil.of("a", "c", "b");
final List<String> sort = CollUtil.sort(of, CompareUtil.natural()); final List<String> sort = CollUtil.sort(of, CompareUtil.natural());
Assertions.assertEquals("a,b,c", CollUtil.join(sort, ",")); assertEquals("a,b,c", CollUtil.join(sort, ","));
} }
@Test @Test
@ -914,9 +913,9 @@ public class CollUtilTest {
genderMap.put(5, "小孩"); genderMap.put(5, "小孩");
genderMap.put(6, ""); genderMap.put(6, "");
Assertions.assertEquals(people.get(1).getGender(), "woman"); assertEquals("woman", people.get(1).getGender());
CollUtil.setValueByMap(people, genderMap, Person::getId, Person::setGender); CollUtil.setValueByMap(people, genderMap, Person::getId, Person::setGender);
Assertions.assertEquals(people.get(1).getGender(), "妇女"); assertEquals("妇女", people.get(1).getGender());
final Map<Integer, Person> personMap = new HashMap<>(); final Map<Integer, Person> personMap = new HashMap<>();
personMap.put(1, new Person("AA", 21, "", 1)); personMap.put(1, new Person("AA", 21, "", 1));
@ -932,13 +931,13 @@ public class CollUtilTest {
x.setAge(y.getAge()); x.setAge(y.getAge());
}); });
Assertions.assertEquals(people.get(1).getGender(), "小孩"); assertEquals("小孩", people.get(1).getGender());
} }
@Test @Test
public void distinctTest() { public void distinctTest() {
final List<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));
Assertions.assertEquals(ListUtil.view(5, 3, 10, 9, 0), distinct); assertEquals(ListUtil.view(5, 3, 10, 9, 0), distinct);
} }
@Test @Test
@ -954,15 +953,15 @@ public class CollUtilTest {
// 覆盖模式下ff覆盖了aaee覆盖了bb // 覆盖模式下ff覆盖了aaee覆盖了bb
List<Person> distinct = CollUtil.distinct(people, Person::getGender, true); List<Person> distinct = CollUtil.distinct(people, Person::getGender, true);
Assertions.assertEquals(2, distinct.size()); assertEquals(2, distinct.size());
Assertions.assertEquals("ff", distinct.get(0).getName()); assertEquals("ff", distinct.get(0).getName());
Assertions.assertEquals("ee", distinct.get(1).getName()); assertEquals("ee", distinct.get(1).getName());
// 非覆盖模式下保留了最早加入的aa和bb // 非覆盖模式下保留了最早加入的aa和bb
distinct = CollUtil.distinct(people, Person::getGender, false); distinct = CollUtil.distinct(people, Person::getGender, false);
Assertions.assertEquals(2, distinct.size()); assertEquals(2, distinct.size());
Assertions.assertEquals("aa", distinct.get(0).getName()); assertEquals("aa", distinct.get(0).getName());
Assertions.assertEquals("bb", distinct.get(1).getName()); assertEquals("bb", distinct.get(1).getName());
} }
@Data @Data
@ -978,7 +977,7 @@ public class CollUtilTest {
public void mapTest() { public void mapTest() {
final List<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"); final List<Object> extract = CollUtil.map(list, (e) -> e + "_1");
Assertions.assertEquals(ListUtil.of("a_1", "b_1", "c_1"), extract); assertEquals(ListUtil.of("a_1", "b_1", "c_1"), extract);
} }
@Test @Test
@ -991,7 +990,7 @@ public class CollUtilTest {
); );
final List<Object> extract = CollUtil.map(people, Person::getName); final List<Object> extract = CollUtil.map(people, Person::getName);
Assertions.assertEquals(ListUtil.of("aa", "bb", "cc", "dd"), extract); assertEquals(ListUtil.of("aa", "bb", "cc", "dd"), extract);
} }
@Test @Test
@ -1011,7 +1010,7 @@ public class CollUtilTest {
); );
final Collection<String> trans = CollUtil.trans(people, Person::getName); final Collection<String> trans = CollUtil.trans(people, Person::getName);
Assertions.assertEquals("[aa, bb, cc, dd]", trans.toString()); assertEquals("[aa, bb, cc, dd]", trans.toString());
} }
@SuppressWarnings("ConstantConditions") @SuppressWarnings("ConstantConditions")
@ -1043,7 +1042,7 @@ public class CollUtilTest {
final List<String> list = CollUtil.unionAll(list1, list2, list3); final List<String> list = CollUtil.unionAll(list1, list2, list3);
Assertions.assertNotNull(list); Assertions.assertNotNull(list);
Assertions.assertEquals( assertEquals(
ListUtil.of(1, 2, 3, 4), ListUtil.of(1, 2, 3, 4),
CollUtil.unionAll(ListUtil.of(1), ListUtil.of(2), ListUtil.of(3), ListUtil.of(4)) CollUtil.unionAll(ListUtil.of(1), ListUtil.of(2), ListUtil.of(3), ListUtil.of(4))
); );
@ -1133,11 +1132,11 @@ public class CollUtilTest {
Assertions.assertNull(CollUtil.getFirst(null)); Assertions.assertNull(CollUtil.getFirst(null));
Assertions.assertNull(CollUtil.getFirst(ListUtil.of())); Assertions.assertNull(CollUtil.getFirst(ListUtil.of()));
Assertions.assertEquals("1", CollUtil.getFirst(ListUtil.of("1", "2", "3"))); assertEquals("1", CollUtil.getFirst(ListUtil.of("1", "2", "3")));
final ArrayDeque<String> deque = new ArrayDeque<>(); final ArrayDeque<String> deque = new ArrayDeque<>();
deque.add("3"); deque.add("3");
deque.add("4"); deque.add("4");
Assertions.assertEquals("3", CollUtil.getFirst(deque)); assertEquals("3", CollUtil.getFirst(deque));
} }
@Test @Test
@ -1147,16 +1146,16 @@ public class CollUtilTest {
stack.push(i); stack.push(i);
} }
final List<Integer> popPart1 = CollUtil.popPart(stack, 3); final List<Integer> popPart1 = CollUtil.popPart(stack, 3);
Assertions.assertEquals(ListUtil.of(9, 8, 7), popPart1); assertEquals(ListUtil.of(9, 8, 7), popPart1);
Assertions.assertEquals(7, stack.size()); assertEquals(7, stack.size());
final ArrayDeque<Integer> queue = new ArrayDeque<>(); final ArrayDeque<Integer> queue = new ArrayDeque<>();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
queue.push(i); queue.push(i);
} }
final List<Integer> popPart2 = CollUtil.popPart(queue, 3); final List<Integer> popPart2 = CollUtil.popPart(queue, 3);
Assertions.assertEquals(ListUtil.of(9, 8, 7), popPart2); assertEquals(ListUtil.of(9, 8, 7), popPart2);
Assertions.assertEquals(7, queue.size()); assertEquals(7, queue.size());
} }
@Test @Test
@ -1185,7 +1184,7 @@ public class CollUtilTest {
@Test @Test
public void maxTest() { public void maxTest() {
final List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6); final List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
Assertions.assertEquals((Integer) 6, CollUtil.max(list)); assertEquals((Integer) 6, CollUtil.max(list));
} }
@SuppressWarnings({"rawtypes", "unchecked"}) @SuppressWarnings({"rawtypes", "unchecked"})
@ -1204,7 +1203,7 @@ public class CollUtilTest {
public void unionExtendTest() { public void unionExtendTest() {
final List<Dog> dog = Arrays.asList(new Dog("dog1", 12), new Dog("dog2", 12)); final List<Dog> dog = Arrays.asList(new Dog("dog1", 12), new Dog("dog2", 12));
final List<Cat> cat = Arrays.asList(new Cat("cat1", 12), new Cat("cat2", 12)); final List<Cat> cat = Arrays.asList(new Cat("cat1", 12), new Cat("cat2", 12));
Assertions.assertEquals(CollUtil.union(dog, cat).size(), dog.size() + cat.size()); assertEquals(CollUtil.union(dog, cat).size(), dog.size() + cat.size());
} }
@Test @Test
@ -1212,7 +1211,7 @@ public class CollUtilTest {
final List<Dog> dog = Arrays.asList(new Dog("dog1", 12), new Dog("dog2", 12)); final List<Dog> dog = Arrays.asList(new Dog("dog1", 12), new Dog("dog2", 12));
final List<Cat> cat = Arrays.asList(new Cat("cat1", 12), new Cat("cat2", 12)); final List<Cat> cat = Arrays.asList(new Cat("cat1", 12), new Cat("cat2", 12));
final List<Pig> pig = Arrays.asList(new Pig("pig1", 12), new Pig("pig2", 12)); final List<Pig> pig = Arrays.asList(new Pig("pig1", 12), new Pig("pig2", 12));
Assertions.assertEquals(CollUtil.unionAll(dog, cat, pig).size(), dog.size() + cat.size() + pig.size()); assertEquals(CollUtil.unionAll(dog, cat, pig).size(), dog.size() + cat.size() + pig.size());
} }
@Test @Test
@ -1220,7 +1219,7 @@ public class CollUtilTest {
final List<Dog> dog = Arrays.asList(new Dog("dog1", 12), new Dog("dog1", 12)); // same final List<Dog> dog = Arrays.asList(new Dog("dog1", 12), new Dog("dog1", 12)); // same
final List<Cat> cat = Arrays.asList(new Cat("cat1", 12), new Cat("cat2", 12)); final List<Cat> cat = Arrays.asList(new Cat("cat1", 12), new Cat("cat2", 12));
final List<Pig> pig = Arrays.asList(new Pig("pig1", 12), new Pig("pig2", 12)); final List<Pig> pig = Arrays.asList(new Pig("pig1", 12), new Pig("pig2", 12));
Assertions.assertEquals(CollUtil.unionDistinct(dog, cat, pig).size(), 5); assertEquals(5, CollUtil.unionDistinct(dog, cat, pig).size());
} }
@ -1289,4 +1288,16 @@ public class CollUtilTest {
assertTrue(CollUtil.containsAll(coll1, coll2)); assertTrue(CollUtil.containsAll(coll1, coll2));
} }
@Test
void issueIBHP68Test() {
final List<Integer> view1 = ListUtil.view(1, 2, 3);
final List<Integer> l3 = ListUtil.of(1);
final Collection<Integer> subtract = CollUtil.subtract(view1, l3);
assertEquals(2, subtract.size());
assertEquals(2, subtract.iterator().next());
assertFalse(subtract.contains(1));
assertTrue(subtract.contains(2));
assertTrue(subtract.contains(3));
}
} }