From 5239d4b69744495fce06d78dff8eb8666c3138e7 Mon Sep 17 00:00:00 2001
From: TomXin <766781886@qq.com>
Date: Mon, 14 Feb 2022 10:29:07 +0800
Subject: [PATCH 1/2] =?UTF-8?q?GenericBuilder=E6=96=B0=E5=A2=9E2=E4=B8=AA?=
=?UTF-8?q?=E5=8F=82=E6=95=B0=E7=9A=84with=E6=96=B9=E6=B3=95=EF=BC=8C?=
=?UTF-8?q?=E4=BB=A5=E6=94=AF=E6=8C=81Map=E6=9E=84=E5=BB=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../hutool/core/builder/GenericBuilder.java | 36 ++++++++++++++----
.../cn/hutool/core/lang/func/Consumer2.java | 37 +++++++++++++++++++
.../core/builder/GenericBuilderTest.java | 15 ++++++++
3 files changed, 80 insertions(+), 8 deletions(-)
create mode 100644 hutool-core/src/main/java/cn/hutool/core/lang/func/Consumer2.java
diff --git a/hutool-core/src/main/java/cn/hutool/core/builder/GenericBuilder.java b/hutool-core/src/main/java/cn/hutool/core/builder/GenericBuilder.java
index 829ff54db..36f7e067f 100644
--- a/hutool-core/src/main/java/cn/hutool/core/builder/GenericBuilder.java
+++ b/hutool-core/src/main/java/cn/hutool/core/builder/GenericBuilder.java
@@ -1,10 +1,6 @@
package cn.hutool.core.builder;
-import cn.hutool.core.lang.func.Supplier1;
-import cn.hutool.core.lang.func.Supplier2;
-import cn.hutool.core.lang.func.Supplier3;
-import cn.hutool.core.lang.func.Supplier4;
-import cn.hutool.core.lang.func.Supplier5;
+import cn.hutool.core.lang.func.*;
import java.util.ArrayList;
import java.util.List;
@@ -45,7 +41,16 @@ import java.util.function.Supplier;
* .with(Box::alis)
* .build();
*
- *
注意:本工具类支持调用的方法的参数数量不超过1个,更多的参数不利于阅读和维护。
+ * 还可能这样构建Map对象:
+ *
+ * HashMap colorMap = GenericBuilder
+ * .of(HashMap::new)
+ * .with(Map::put, "red", "#FF0000")
+ * .with(Map::put, "yellow", "#FFFF00")
+ * .with(Map::put, "blue", "#0000FF")
+ * .build();
+ *
+ * 注意:本工具类支持调用的构造方法的参数数量不超过5个,一般方法的参数数量不超过2个,更多的参数不利于阅读和维护。
*
* @author TomXin
* @since 5.7.21
@@ -183,9 +188,9 @@ public class GenericBuilder implements Builder {
/**
* 调用1参数方法
*
- * @param 参数一类型
- * @param consumer 1参数Consumer,一般为Setter方法引用
+ * @param consumer 1参数Consumer
* @param p1 参数一
+ * @param 参数一类型
* @return GenericBuilder对象
*/
public GenericBuilder with(BiConsumer consumer, P1 p1) {
@@ -193,6 +198,21 @@ public class GenericBuilder implements Builder {
return this;
}
+ /**
+ * 调用2参数方法
+ *
+ * @param consumer 2参数Consumer
+ * @param p1 参数一
+ * @param p2 参数二
+ * @param 参数一类型
+ * @param 参数二类型
+ * @return GenericBuilder对象
+ */
+ public GenericBuilder with(Consumer2 consumer, P1 p1, P2 p2) {
+ modifiers.add(consumer.toConsumer(p1, p2));
+ return this;
+ }
+
/**
* 构建
*
diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/Consumer2.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/Consumer2.java
new file mode 100644
index 000000000..35d48613e
--- /dev/null
+++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/Consumer2.java
@@ -0,0 +1,37 @@
+package cn.hutool.core.lang.func;
+
+import java.util.function.Consumer;
+
+/**
+ * 2参数Consumer
+ *
+ * @param 目标类型
+ * @param 参数一类型
+ * @param 参数二类型
+ * @author TomXin
+ * @since 5.7.22
+ */
+@FunctionalInterface
+public interface Consumer2 {
+
+ /**
+ * 接收参数方法
+ *
+ * @param t 对象
+ * @param p1 参数一
+ * @param p2 参数二
+ */
+ void accept(T t, P1 p1, P2 p2);
+
+ /**
+ * 将带有参数的Consumer转换为无参{@link Consumer}
+ *
+ * @param p1 参数1
+ * @param p2 参数2
+ * @return {@link Consumer}
+ */
+ default Consumer toConsumer(P1 p1, P2 p2) {
+ return instant -> accept(instant, p1, p2);
+ }
+
+}
diff --git a/hutool-core/src/test/java/cn/hutool/core/builder/GenericBuilderTest.java b/hutool-core/src/test/java/cn/hutool/core/builder/GenericBuilderTest.java
index 84f6d4581..adab2500a 100644
--- a/hutool-core/src/test/java/cn/hutool/core/builder/GenericBuilderTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/builder/GenericBuilderTest.java
@@ -8,6 +8,9 @@ import lombok.experimental.Accessors;
import org.junit.Assert;
import org.junit.Test;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* {@link GenericBuilder} 单元测试类
*
@@ -58,6 +61,18 @@ public class GenericBuilderTest {
Assert.assertEquals(222, box1.getLength().intValue());
Assert.assertEquals(333, box1.getWidth().intValue());
Assert.assertEquals(444, box1.getHeight().intValue());
+ Assert.assertEquals("TomXin:\"Hello Partner!\"", box1.getTitleAlias());
+
+ //Map创建
+ HashMap colorMap = GenericBuilder
+ .of(HashMap::new)
+ .with(Map::put, "red", "#FF0000")
+ .with(Map::put, "yellow", "#FFFF00")
+ .with(Map::put, "blue", "#0000FF")
+ .build();
+ Assert.assertEquals("#FF0000", colorMap.get("red"));
+ Assert.assertEquals("#FFFF00", colorMap.get("yellow"));
+ Assert.assertEquals("#0000FF", colorMap.get("blue"));
}
@Getter
From 004e876be4a10e486738ef3f3ef2ac566ac1a808 Mon Sep 17 00:00:00 2001
From: TomXin <766781886@qq.com>
Date: Mon, 14 Feb 2022 10:36:04 +0800
Subject: [PATCH 2/2] =?UTF-8?q?GenericBuilder=E6=96=B0=E5=A2=9E2=E4=B8=AA?=
=?UTF-8?q?=E5=8F=82=E6=95=B0=E7=9A=84with=E6=96=B9=E6=B3=95=EF=BC=8C?=
=?UTF-8?q?=E4=BB=A5=E6=94=AF=E6=8C=81Map=E6=9E=84=E5=BB=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/cn/hutool/core/builder/GenericBuilder.java | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/hutool-core/src/main/java/cn/hutool/core/builder/GenericBuilder.java b/hutool-core/src/main/java/cn/hutool/core/builder/GenericBuilder.java
index 36f7e067f..03c148f02 100644
--- a/hutool-core/src/main/java/cn/hutool/core/builder/GenericBuilder.java
+++ b/hutool-core/src/main/java/cn/hutool/core/builder/GenericBuilder.java
@@ -1,6 +1,12 @@
package cn.hutool.core.builder;
-import cn.hutool.core.lang.func.*;
+import cn.hutool.core.lang.func.Consumer2;
+import cn.hutool.core.lang.func.Supplier1;
+import cn.hutool.core.lang.func.Supplier2;
+import cn.hutool.core.lang.func.Supplier3;
+import cn.hutool.core.lang.func.Supplier4;
+import cn.hutool.core.lang.func.Supplier5;
+
import java.util.ArrayList;
import java.util.List;