概述
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
目前公司项目中主要采用Hutool作为项目的工具包,相对于google的guava, hutool的工具类采用中文注释,更加符合国人使用。所谓知己知彼,我们需要了解Hutool都具有什么样的功能,才能够最大化发挥它的价值。
本文主要就hutool 5.8.8版本中MapBuilder的使用,一个快速创建并且初始化Map的工具。
场景引入
在创建Map对象并且初始化的时候,通常使用下面这样的代码,下面创建Map的静态常量:
private static final Map<String, String> STATUS_MAP = new HashMap<>(); static { STATUS_MAP.put("1", "启用"); STATUS_MAP.put("2", "禁用"); }
或者下面的代码,也很冗余:
@Test public void testMap() { Map<String, String> map = new HashMap<>(); map.put("a", "1"); map.put("b", "2"); map.put("c", "3"); map.put("d", getValue(4)); }
那么MapBuilder类就可以很好的解决这样丑陋的代码。
MapBuilder使用
依赖引入
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.8</version> </dependency>
演示
@Test public void conditionPutTest() // 初始化map Map<String, String> map = MapBuilder.<String, String>create() .put("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")); }
或者如下:
private static final Map<String, String> STATUS_MAP_NEW = MapUtil.unmodifiable(MapBuilder.<String, String>create().put("1", "启用").put("2", "禁用").build());
源码解析
下面是MapBuilder类的结构图:
实现了Builder接口,构建出map实例。其实这是一个很典型的建造者模式,可以创建出map对象。
- 通过构造方法或者create方法创建一个MapBuilder对象
/** * 链式Map创建类 * * @param map 要使用的Map实现类 */ public MapBuilder(Map<K, V> map) { this.map = map; } /** * 创建Builder * * @param <K> Key类型 * @param <V> Value类型 * @param map Map实体类 * @return MapBuilder * @since 3.2.3 */ public static <K, V> MapBuilder<K, V> create(Map<K, V> map) { return new MapBuilder<>(map); }
- 调用MapBuilder的put方法,向map中put方法,最终返回的是MapBuilder本身,这样的话可以进行链式调用。
/** * 链式Map创建 * * @param k Key类型 * @param v Value类型 * @return 当前类 */ public MapBuilder<K, V> put(K k, V v) { map.put(k, v); return this; }
- 最后调用build方法,返回map本身。
/** * 创建后的map * * @return 创建后的map * @since 3.3.0 */ public Map<K, V> build() { return map(); }
总结
本文主要讲解了Hutool中的MapBuilder类的使用,主要用来创建Map对象,非常精简、方便,希望对大家有帮助。