开发利器Hutool之MapBuilder的使用

836 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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);
	}
  1. 调用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;
	}
  1. 最后调用build方法,返回map本身。
	/**
	 * 创建后的map
	 * 
	 * @return 创建后的map
	 * @since 3.3.0
	 */
	public Map<K, V> build() {
		return map();
	}

总结

本文主要讲解了Hutool中的MapBuilder类的使用,主要用来创建Map对象,非常精简、方便,希望对大家有帮助。