diff --git a/hutool-core/src/main/java/cn/hutool/core/map/MapBuilder.java b/hutool-core/src/main/java/cn/hutool/core/map/MapBuilder.java index 3787a2ef8..64bc52c16 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/MapBuilder.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/MapBuilder.java @@ -2,6 +2,7 @@ package cn.hutool.core.map; import java.io.Serializable; import java.util.Map; +import java.util.function.Supplier; /** * Map创建类 @@ -74,6 +75,36 @@ public class MapBuilder implements Serializable{ return this; } + /** + * 链式Map创建 + * + * @param condition put条件 + * @param k Key类型 + * @param v Value类型 + * @return 当前类 + */ + public MapBuilder put(boolean condition, K k, V v) { + if (condition) { + map.put(k, v); + } + return this; + } + + /** + * 链式Map创建 + * + * @param condition put条件 + * @param k Key类型 + * @param supplier Value类型结果提供方 + * @return 当前类 + */ + public MapBuilder put(boolean condition, K k, Supplier supplier) { + if (condition) { + map.put(k, supplier.get()); + } + return this; + } + /** * 链式Map创建 * @@ -138,4 +169,4 @@ public class MapBuilder implements Serializable{ return MapUtil.join(this.map, separator, keyValueSeparator, isIgnoreNull); } -} \ No newline at end of file +} diff --git a/hutool-core/src/test/java/cn/hutool/core/map/MapBuilderTest.java b/hutool-core/src/test/java/cn/hutool/core/map/MapBuilderTest.java new file mode 100644 index 000000000..cd82eba2b --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/map/MapBuilderTest.java @@ -0,0 +1,29 @@ +package cn.hutool.core.map; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.Map; + +public class MapBuilderTest { + + @Test + public void conditionPutTest() { + Map map = MapBuilder.create() + .put(true, "a", "1") + .put(false, "b", "2") + .put(true, "c", () -> getValue(3)) + .put(false, "d", () -> getValue(4)) + .build(); + + Assert.assertEquals(map.get("a"), "1"); + Assert.assertFalse(map.containsKey("b")); + Assert.assertEquals(map.get("c"), "3"); + Assert.assertFalse(map.containsKey("d")); + } + + public String getValue(int value) { + System.out.println("getValue: " + value); + return String.valueOf(value); + } +}