开发利器Hutool之MapBuilder的使用

简介: 开发利器Hutool之MapBuilder的使用

概述


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类的结构图:

1671192487013.jpg

实现了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对象,非常精简、方便,希望对大家有帮助。

目录
相关文章
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
XML 算法 Java
基于雪花算法解决Mybatis-Plus id主键生成的问题
基于雪花算法解决Mybatis-Plus id主键生成的问题
1857 0
|
8月前
|
缓存 监控 数据可视化
|
网络协议 Java
【Java】已解决java.net.UnknownHostException异常
【Java】已解决java.net.UnknownHostException异常
4611 0
完美解决Non-terminating decimal expansion; no exact representable decimal result.异常
完美解决Non-terminating decimal expansion; no exact representable decimal result.异常
27696 0
完美解决Non-terminating decimal expansion; no exact representable decimal result.异常
|
JSON 前端开发 JavaScript
json字符串如何转为list对象?
json字符串如何转为list对象?
2112 7
|
Java 编译器 Spring
面试突击78:@Autowired 和 @Resource 有什么区别?
面试突击78:@Autowired 和 @Resource 有什么区别?
16976 6
|
Java Spring
【亲测有效完结bug】org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exce
【亲测有效完结bug】org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exce
1993 0
|
安全 算法 Java
在Spring Boot项目中集成Jasypt(Java Simplified Encryption)
在Spring Boot项目中集成Jasypt(Java Simplified Encryption)
1061 7
|
程序员 开发者
IDEA插件-Rainbow Brackets彩虹括号
DEA插件-Rainbow Brackets是一款用于增强IDEA开发环境的工具,它可以帮助开发者更好地管理和展示代码中的括号。
4756 0
IDEA插件-Rainbow Brackets彩虹括号