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;