持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情
概述
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对象,非常精简、方便,希望对大家有帮助。