From 34af7f5711eeb23ecbe2447049e248048ace344f Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 12 Jul 2021 19:38:08 +0800 Subject: [PATCH] add method --- CHANGELOG.md | 1 + .../cn/hutool/core/collection/IterUtil.java | 29 ++++++++++++------- .../java/cn/hutool/core/util/ArrayUtil.java | 3 +- .../main/java/cn/hutool/core/util/IdUtil.java | 1 + .../hutool/core/collection/IterUtilTest.java | 6 ++++ 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e0dd7f84..de9a705f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### 🐣新特性 * 【core 】 DateUtil增加ceiling重载,可选是否归零毫秒 +* 【core 】 IterUtil增加firstMatch方法 ### 🐞Bug修复 * 【core 】 修复FileUtil.normalize处理上级路径的问题(issue#I3YPEH@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/IterUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/IterUtil.java index 81caf172d..ef0991fc8 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/IterUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/IterUtil.java @@ -1,8 +1,10 @@ package cn.hutool.core.collection; import cn.hutool.core.exceptions.UtilException; +import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Editor; import cn.hutool.core.lang.Filter; +import cn.hutool.core.lang.Matcher; import cn.hutool.core.lang.func.Func1; import cn.hutool.core.map.MapUtil; import cn.hutool.core.text.StrJoiner; @@ -129,16 +131,7 @@ public class IterUtil { * @since 3.3.0 */ public static boolean isAllNull(Iterator iter) { - if (null == iter) { - return true; - } - - while (iter.hasNext()) { - if (null != iter.next()) { - return false; - } - } - return true; + return null == getFirstNoneNull(iter); } /** @@ -601,10 +594,24 @@ public class IterUtil { * @since 5.7.2 */ public static T getFirstNoneNull(Iterator iterator) { + return firstMatch(iterator, Objects::nonNull); + } + + /** + * 返回{@link Iterator}中第一个匹配规则的值 + * + * @param 数组元素类型 + * @param iterator {@link Iterator} + * @param matcher 匹配接口,实现此接口自定义匹配规则 + * @return 匹配元素,如果不存在匹配元素或{@link Iterator}为空,返回 {@code null} + * @since 5.7.5 + */ + public static T firstMatch(Iterator iterator, Matcher matcher) { + Assert.notNull(matcher, "Matcher must be not null !"); if (null != iterator) { while(iterator.hasNext()){ final T next = iterator.next(); - if(null != next){ + if(matcher.match(next)){ return next; } } diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java index 20b6b1418..6325c012c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java @@ -159,7 +159,7 @@ public class ArrayUtil extends PrimitiveArrayUtil { * @param 数组元素类型 * @param matcher 匹配接口,实现此接口自定义匹配规则 * @param array 数组 - * @return 非空元素,如果不存在非空元素或数组为空,返回{@code null} + * @return 匹配元素,如果不存在匹配元素或数组为空,返回 {@code null} * @since 3.0.7 */ @SuppressWarnings("unchecked") @@ -198,6 +198,7 @@ public class ArrayUtil extends PrimitiveArrayUtil { */ @SuppressWarnings("unchecked") public static int matchIndex(Matcher matcher, int beginIndexInclude, T... array) { + Assert.notNull(matcher, "Matcher must be not null !"); if (isNotEmpty(array)) { for (int i = beginIndexInclude; i < array.length; i++) { if (matcher.match(array[i])) { diff --git a/hutool-core/src/main/java/cn/hutool/core/util/IdUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/IdUtil.java index bee58320f..c2f4de5f1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/IdUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/IdUtil.java @@ -223,6 +223,7 @@ public class IdUtil { * * @param datacenterId 数据中心ID * @param maxWorkerId 最大的机器节点ID + * @return ID * @since 5.7.3 */ public static long getWorkerId(long datacenterId, long maxWorkerId) { diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/IterUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/IterUtilTest.java index d62461538..bc3f7b5f7 100644 --- a/hutool-core/src/test/java/cn/hutool/core/collection/IterUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/collection/IterUtilTest.java @@ -12,6 +12,12 @@ import java.util.*; */ public class IterUtilTest { + @Test + public void getFirstNonNullTest(){ + final ArrayList strings = CollUtil.newArrayList(null, null, "123", "456", null); + Assert.assertEquals("123", IterUtil.getFirstNoneNull(strings)); + } + @Test public void fieldValueMapTest() { ArrayList carList = CollUtil.newArrayList(new Car("123", "大众"), new Car("345", "奔驰"), new Car("567", "路虎"));