From 31e5eead898878115eae5cfbc90ec35735ce0028 Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 9 Jul 2022 13:27:36 +0800 Subject: [PATCH] fix code --- .../core/collection/CollStreamUtil.java | 29 +++++++++---------- .../cn/hutool/core/collection/ListUtil.java | 11 +++++++ .../cn/hutool/core/collection/SetUtil.java | 11 +++++++ .../main/java/cn/hutool/core/map/MapUtil.java | 11 +++++++ .../cn/hutool/core/regex/PatternPool.java | 4 +-- .../java/cn/hutool/core/regex/RegexPool.java | 2 +- .../cn/hutool/core/text/CharSequenceUtil.java | 20 +++++++++++++ .../core/text/CharSequenceUtilTest.java | 6 ++++ .../main/java/cn/hutool/http/HttpRequest.java | 17 ++++++++++- 9 files changed, 92 insertions(+), 19 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/CollStreamUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/CollStreamUtil.java index c5ef7ba43..f111b326e 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/CollStreamUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/CollStreamUtil.java @@ -7,7 +7,6 @@ import cn.hutool.core.stream.CollectorUtil; import cn.hutool.core.stream.StreamUtil; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -22,7 +21,7 @@ import java.util.stream.Collectors; /** * 集合的stream操作封装 * - * @author 528910437@QQ.COM, VampireAchao<achao1441470436@gmail.com> + * @author 528910437@QQ.COM, VampireAchao<achao1441470436@gmail.com>;Lion Li> * @since 5.5.2 */ public class CollStreamUtil { @@ -55,7 +54,7 @@ public class CollStreamUtil { */ public static Map toIdentityMap(final Collection collection, final Function key, final boolean isParallel) { if (CollUtil.isEmpty(collection)) { - return Collections.emptyMap(); + return MapUtil.zero(); } return toMap(collection, (v) -> Opt.ofNullable(v).map(key).get(), Function.identity(), isParallel); } @@ -88,7 +87,7 @@ public class CollStreamUtil { */ public static Map toMap(final Collection collection, final Function key, final Function value, final boolean isParallel) { if (CollUtil.isEmpty(collection)) { - return Collections.emptyMap(); + return MapUtil.zero(); } return StreamUtil.of(collection, isParallel) .collect(HashMap::new, (m, v) -> m.put(key.apply(v), value.apply(v)), HashMap::putAll); @@ -122,7 +121,7 @@ public class CollStreamUtil { */ public static Map> groupByKey(final Collection collection, final Function key, final boolean isParallel) { if (CollUtil.isEmpty(collection)) { - return Collections.emptyMap(); + return MapUtil.zero(); } return groupBy(collection, key, Collectors.toList(), isParallel); } @@ -160,7 +159,7 @@ public class CollStreamUtil { public static Map>> groupBy2Key(final Collection collection, final Function key1, final Function key2, final boolean isParallel) { if (CollUtil.isEmpty(collection)) { - return Collections.emptyMap(); + return MapUtil.zero(); } return groupBy(collection, key1, CollectorUtil.groupingBy(key2, Collectors.toList()), isParallel); } @@ -197,7 +196,7 @@ public class CollStreamUtil { public static Map> group2Map(final Collection collection, final Function key1, final Function key2, final boolean isParallel) { if (CollUtil.isEmpty(collection) || key1 == null || key2 == null) { - return Collections.emptyMap(); + return MapUtil.zero(); } return groupBy(collection, key1, CollectorUtil.toMap(key2, Function.identity(), (l, r) -> l), isParallel); } @@ -235,7 +234,7 @@ public class CollStreamUtil { public static Map> groupKeyValue(final Collection collection, final Function key, final Function value, final boolean isParallel) { if (CollUtil.isEmpty(collection)) { - return Collections.emptyMap(); + return MapUtil.zero(); } return groupBy(collection, key, Collectors.mapping(v -> Opt.ofNullable(v).map(value).orElse(null), Collectors.toList()), isParallel); } @@ -254,7 +253,7 @@ public class CollStreamUtil { */ public static Map groupBy(final Collection collection, final Function key, final Collector downstream) { if (CollUtil.isEmpty(collection)) { - return Collections.emptyMap(); + return MapUtil.zero(); } return groupBy(collection, key, downstream, false); } @@ -275,7 +274,7 @@ public class CollStreamUtil { */ public static Map groupBy(final Collection collection, final Function key, final Collector downstream, final boolean isParallel) { if (CollUtil.isEmpty(collection)) { - return Collections.emptyMap(); + return MapUtil.zero(); } return StreamUtil.of(collection, isParallel).collect(CollectorUtil.groupingBy(key, downstream)); } @@ -307,7 +306,7 @@ public class CollStreamUtil { */ public static List toList(final Collection collection, final Function function, final boolean isParallel) { if (CollUtil.isEmpty(collection)) { - return Collections.emptyList(); + return ListUtil.zero(); } return StreamUtil.of(collection, isParallel) .map(function) @@ -342,7 +341,7 @@ public class CollStreamUtil { */ public static Set toSet(final Collection collection, final Function function, final boolean isParallel) { if (CollUtil.isEmpty(collection)) { - return Collections.emptySet(); + return SetUtil.zero(); } return StreamUtil.of(collection, isParallel) .map(function) @@ -365,11 +364,11 @@ public class CollStreamUtil { */ public static Map merge(Map map1, Map map2, final BiFunction merge) { if (MapUtil.isEmpty(map1) && MapUtil.isEmpty(map2)) { - return Collections.emptyMap(); + return MapUtil.zero(); } else if (MapUtil.isEmpty(map1)) { - map1 = Collections.emptyMap(); + map1 = MapUtil.empty(); } else if (MapUtil.isEmpty(map2)) { - map2 = Collections.emptyMap(); + map2 = MapUtil.empty(); } final Set key = new HashSet<>(); key.addAll(map1.keySet()); 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 7b7223a2e..a0147343d 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 @@ -214,6 +214,17 @@ public class ListUtil { return Collections.emptyList(); } + /** + * 获取一个初始大小为0的List,这个空List可变 + * + * @param 元素类型 + * @return 空的List + * @since 6.0.0 + */ + public static List zero() { + return new ArrayList<>(0); + } + /** * 新建一个CopyOnWriteArrayList * diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/SetUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/SetUtil.java index fcb00fb91..2b62725f6 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/SetUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/SetUtil.java @@ -175,6 +175,17 @@ public class SetUtil { return Collections.emptySet(); } + /** + * 获取一个初始大小为0的Set,这个空Set可变 + * + * @param 元素类型 + * @return 空的List + * @since 6.0.0 + */ + public static Set zero() { + return new HashSet<>(0, 1); + } + /** * 转为只读Set * diff --git a/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java b/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java index 1b1a8a650..448e75332 100755 --- a/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java @@ -1351,6 +1351,17 @@ public class MapUtil { return Collections.emptyMap(); } + /** + * 返回一个初始大小为0的HashMap(初始为0,可加入元素) + * + * @param 键类型 + * @param 值类型 + * @return 初始大小为0的HashMap + */ + public static Map zero() { + return new HashMap<>(0, 1); + } + /** * 根据传入的Map类型不同,返回对应类型的空Map,支持类型包括: * diff --git a/hutool-core/src/main/java/cn/hutool/core/regex/PatternPool.java b/hutool-core/src/main/java/cn/hutool/core/regex/PatternPool.java index faa6b1207..31015a0ee 100755 --- a/hutool-core/src/main/java/cn/hutool/core/regex/PatternPool.java +++ b/hutool-core/src/main/java/cn/hutool/core/regex/PatternPool.java @@ -140,7 +140,7 @@ public class PatternPool { public final static Pattern PLATE_NUMBER = Pattern.compile(RegexPool.PLATE_NUMBER); /** - * 社会统一信用代码 + * 统一社会信用代码 *
 	 * 第一部分:登记管理部门代码1位 (数字或大写英文字母)
 	 * 第二部分:机构类别代码1位 (数字或大写英文字母)
@@ -197,7 +197,7 @@ public class PatternPool {
 	 */
 	public static Pattern get(final String regex, final int flags) {
 		final RegexWithFlag regexWithFlag = new RegexWithFlag(regex, flags);
-		return POOL.computeIfAbsent(regexWithFlag, (key)-> Pattern.compile(regex, flags));
+		return POOL.computeIfAbsent(regexWithFlag, (key) -> Pattern.compile(regex, flags));
 	}
 
 	/**
diff --git a/hutool-core/src/main/java/cn/hutool/core/regex/RegexPool.java b/hutool-core/src/main/java/cn/hutool/core/regex/RegexPool.java
index 6d8cfa9be..ead0757ad 100755
--- a/hutool-core/src/main/java/cn/hutool/core/regex/RegexPool.java
+++ b/hutool-core/src/main/java/cn/hutool/core/regex/RegexPool.java
@@ -150,7 +150,7 @@ public interface RegexPool {
 					"([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$";
 
 	/**
-	 * 社会统一信用代码
+	 * 统一社会信用代码
 	 * 
 	 * 第一部分:登记管理部门代码1位 (数字或大写英文字母)
 	 * 第二部分:机构类别代码1位 (数字或大写英文字母)
diff --git a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java
index 122362c22..8e4512ac9 100755
--- a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java
@@ -722,6 +722,26 @@ public class CharSequenceUtil extends StrChecker{
 		return null;
 	}
 
+	/**
+	 * 检查指定字符串中是否含给定的所有字符串
+	 *
+	 * @param str       字符串
+	 * @param testChars 检查的字符
+	 * @return 字符串含有非检查的字符,返回false
+	 * @since 4.4.1
+	 */
+	public static boolean containsAll(CharSequence str, CharSequence... testChars) {
+		if (isBlank(str) || ArrayUtil.isEmpty(testChars)) {
+			return false;
+		}
+		for (CharSequence testChar : testChars) {
+			if (false == contains(str, testChar)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
 	// ------------------------------------------------------------------------ indexOf
 
 	/**
diff --git a/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java
index 630739ce8..4b9dab63d 100755
--- a/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java
@@ -160,4 +160,10 @@ public class CharSequenceUtilTest {
 		a = null;
 		Assert.assertNull(CharSequenceUtil.trimToNull(a));
 	}
+
+	@Test
+	public void containsAllTest() {
+		final String a = "2142342422423423";
+		Assert.assertTrue(StrUtil.containsAll(a, "214", "234"));
+	}
 }
diff --git a/hutool-http/src/main/java/cn/hutool/http/HttpRequest.java b/hutool-http/src/main/java/cn/hutool/http/HttpRequest.java
index 8989e7c67..8d30e6e23 100755
--- a/hutool-http/src/main/java/cn/hutool/http/HttpRequest.java
+++ b/hutool-http/src/main/java/cn/hutool/http/HttpRequest.java
@@ -35,6 +35,7 @@ import java.nio.charset.Charset;
 import java.util.Collection;
 import java.util.Map;
 import java.util.function.Consumer;
+import java.util.function.Function;
 
 /**
  * http请求类
@@ -1009,8 +1010,22 @@ public class HttpRequest extends HttpBase { * @since 5.7.8 */ public void then(final Consumer consumer) { + thenFunction(httpResponse -> { + consumer.accept(httpResponse); + return null; + }); + } + + /** + * 执行Request请求后,对响应内容后续处理
+ * 处理结束后关闭连接 + * + * @param function 响应内容处理函数 + * @since 5.8.5 + */ + public T thenFunction(final Function function) { try (final HttpResponse response = execute(true)) { - consumer.accept(response); + return function.apply(response); } }