diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java index e21f3aa92..70e69a115 100755 --- a/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java @@ -685,6 +685,7 @@ public class ListUtil { * @param otherList 其它列表 * @return 此列表 */ + @SuppressWarnings("UnusedReturnValue") public static List addAllIfNotContains(final List list, final List otherList) { for (final T t : otherList) { if (false == list.contains(t)) { @@ -695,12 +696,13 @@ public class ListUtil { } /** + * 通过删除或替换现有元素或者原地添加新的元素来修改列表,并以列表形式返回被修改的内容。此方法不会改变原列表。 * 类似js的splice函数 * - * @param start 起始下标, 可以为负数, -1代表最后一个元素 + * @param start 指定修改的开始位置(从 0 计数), 可以为负数, -1代表最后一个元素 * @param deleteCount 删除个数,必须是正整数 - * @param items 放入值 - * @return 操作后的流 + * @param items 放入的元素 + * @return 结果列表 * @since 6.0.0 */ @SafeVarargs diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Opt.java b/hutool-core/src/main/java/cn/hutool/core/lang/Opt.java index 66315b586..8b10f1803 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/Opt.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/Opt.java @@ -137,7 +137,7 @@ public class Opt { */ @SuppressWarnings("OptionalUsedAsFieldOrParameterType") public static Opt of(Optional optional) { - return ofNullable(optional).flattedMap(Function.identity()); + return ofNullable(optional.orElse(null)); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java b/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java index 850ce1cdb..fa01f02c9 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java @@ -1063,13 +1063,10 @@ public class Validator { Assert.notNull(value); Assert.notNull(start); Assert.notNull(end); - int c1 = DateUtil.compare(value, start); - int c2 = DateUtil.compare(value, end); - if(c1 >= 0 && c2 <= 0){ - return; + if(false == DateUtil.isIn(value, start, end)){ + throw new ValidateException(errorMsg); } - throw new ValidateException(errorMsg); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/mutable/MutableObj.java b/hutool-core/src/main/java/cn/hutool/core/lang/mutable/MutableObj.java index c8a9397b2..d78828635 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/mutable/MutableObj.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/mutable/MutableObj.java @@ -1,7 +1,6 @@ package cn.hutool.core.lang.mutable; import java.io.Serializable; -import java.util.function.Consumer; /** * 可变{@code Object} @@ -9,7 +8,7 @@ import java.util.function.Consumer; * @param 可变的类型 * @since 3.0.1 */ -public class MutableObj implements Mutable, Serializable, Consumer { +public class MutableObj implements Mutable, Serializable{ private static final long serialVersionUID = 1L; /** @@ -51,17 +50,6 @@ public class MutableObj implements Mutable, Serializable, Consumer { this.value = value; } - /** - * 消费元素 - * - * @param t t - * @since 6.0.0 - */ - @Override - public void accept(T t) { - this.value = t; - } - // ----------------------------------------------------------------------- @Override public boolean equals(final Object obj) { diff --git a/hutool-core/src/main/java/cn/hutool/core/stream/FastStream.java b/hutool-core/src/main/java/cn/hutool/core/stream/FastStream.java index d07307938..335231acc 100644 --- a/hutool-core/src/main/java/cn/hutool/core/stream/FastStream.java +++ b/hutool-core/src/main/java/cn/hutool/core/stream/FastStream.java @@ -938,7 +938,7 @@ public class FastStream implements Stream, Iterable { */ public Optional findLast() { MutableObj last = new MutableObj<>(null); - spliterator().forEachRemaining(last); + spliterator().forEachRemaining(last::set); return Optional.ofNullable(last.get()); } @@ -1226,7 +1226,7 @@ public class FastStream implements Stream, Iterable { // 保存第二个Spliterator的值 MutableObj value = new MutableObj<>(); // 当两个Spliterator中都还有剩余元素时 - while (keys.tryAdvance(key) && values.tryAdvance(value)) { + while (keys.tryAdvance(key::set) && values.tryAdvance(value::set)) { map.put(key.get(), value.get()); } return map; @@ -1394,7 +1394,7 @@ public class FastStream implements Stream, Iterable { // 保存第二个Spliterator的值 MutableObj value = new MutableObj<>(); // 当两个Spliterator中都还有剩余元素时 - while (keys.tryAdvance(key) && values.tryAdvance(value)) { + while (keys.tryAdvance(key::set) && values.tryAdvance(value::set)) { list.add(zipper.apply(key.get(), value.get())); } return of(list).parallel(isParallel()).onClose(stream::close); diff --git a/hutool-core/src/main/java/cn/hutool/core/tree/TreeUtil.java b/hutool-core/src/main/java/cn/hutool/core/tree/TreeUtil.java index 06853e18e..3537f3815 100644 --- a/hutool-core/src/main/java/cn/hutool/core/tree/TreeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/tree/TreeUtil.java @@ -6,8 +6,12 @@ import cn.hutool.core.tree.parser.NodeParser; import cn.hutool.core.util.ObjUtil; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.Queue; +import java.util.Stack; /** * 树工具类 @@ -245,7 +249,7 @@ public class TreeUtil { * @return 森林所有节点列表 */ public static List> deepFirstForestConvertToList(List> forest) { - if (CollectionUtil.isEmpty(forest)) { + if (CollUtil.isEmpty(forest)) { return null; } List> list = new ArrayList<>(); @@ -261,7 +265,7 @@ public class TreeUtil { * @return 森林所有节点列表 */ public static List> broadFirstForestConvertToList(List> forest) { - if (CollectionUtil.isEmpty(forest)) { + if (CollUtil.isEmpty(forest)) { return null; } List> list = new ArrayList<>(); @@ -297,7 +301,7 @@ public class TreeUtil { } /** - * 深度优先,遍历树,将树转换为数组 + * 广度优先,遍历树,将树转换为数组 * * @param root 树的根节点 * @param 节点ID类型 diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/ListUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/ListUtilTest.java index 2d7bd9dc5..c8d330e88 100644 --- a/hutool-core/src/test/java/cn/hutool/core/collection/ListUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/collection/ListUtilTest.java @@ -15,6 +15,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; public class ListUtilTest { @@ -266,4 +267,16 @@ public class ListUtilTest { ListUtil.setOrPadding(list, 3, "a"); Assert.assertEquals(4, list.size()); } + + @Test + public void ofCopyOnWriteTest(){ + final CopyOnWriteArrayList strings = ListUtil.ofCopyOnWrite(ListUtil.of("a", "b")); + Assert.assertEquals(2, strings.size()); + } + + @Test + public void ofCopyOnWriteTest2(){ + final CopyOnWriteArrayList strings = ListUtil.ofCopyOnWrite("a", "b"); + Assert.assertEquals(2, strings.size()); + } }