Hutool开发MapUtil工具类使用示例

作者:JAVA旭阳 时间:2022-10-21 22:49:27 

概述

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

目前公司项目中主要采用Hutool作为项目的工具包,相对于google的guava, hutool的工具类采用中文注释,更加符合国人使用。所谓知己知彼,我们需要了解Hutool都具有什么样的功能,才能够最大化发挥它的价值。

本文主要就hutool 5.8.8版本, 介绍其中一个操作Map哈希表的工具类MapUtil,我这边主要介绍几个比较好用的方法。

行列互转

大家是不是遇到过将多个map以key进行分组,然后相同key下的value合并成一个list的场景,现在可以通过下面的行列互转的方式轻松解决。

  • toListMap:行转列,合并相同的键,值合并为列表。

  • toMapList: 列转行。将Map中值列表分别按照其位置与key组成新的map。

@Test
public void toListMapTest() {
   Map<String, String> map1 = MapUtil.of("a", "1");
   Map<String, String> map2 = MapUtil.of("a", "5");
   Map<String, String> map3 = MapUtil.of("b", "4");
   Map<String, String> map4 = MapUtil.of("a", "5");
   List<Map<String, String>> maps = new ArrayList<>();
   maps.add(map1);
   maps.add(map2);
   maps.add(map3);
   maps.add(map4);
   // 调用toListMap, 将list转为map
   System.out.println("toListMap: ");
   Map<String, List<String>> listMap = MapUtil.toListMap(maps);
   System.out.println(listMap);
   // toMapList, 将map转为list
   System.out.println("toMapList: ");
   List<Map<String, String>> mapList = MapUtil.toMapList(listMap);
   System.out.println(mapList);
}

结果:

Hutool开发MapUtil工具类使用示例

键值互换

  • inverse或者reverse方法,Map的键和值互换

@Test
public void inverseTest() {
   Map<String, String> map = MapUtil.newHashMap();
   map.put("a", "1");
   map.put("b", "2");
   map.put("c", "1");
   Map<String, String> inverse = MapUtil.inverse(map);
   System.out.println(inverse);
}

结果:

Hutool开发MapUtil工具类使用示例

sort排序操作

sort(Map<K, V> map): 排序已有Map,Key有序的Map,使用默认Key排序方式(字母顺序)

sort(Map<K, V> map, Comparator<? super K> comparator):排序已有Map,Key有序的Map

sortByValue(Map<K, V> map, boolean isDesc):按照值排序,可选是否倒序

@Test
   public void sortTest() {
       Map<String, String> map = MapUtil.newHashMap();
       map.put("a", "1");
       map.put("b", "2");
       map.put("c", "1");
       // 排序, 不会改变原来的值
       Map<String, String> newMap = MapUtil.sortByValue(map, true);
       System.out.println(newMap);
   }

结果:

Hutool开发MapUtil工具类使用示例

join连接操作

  • join: 将map转成字符串

  • sortJoin: 根据参数排序后拼接为字符串,常用于签名

  • joinIgnoreNull: 将map转成字符串,忽略null的键和值

@Test
public void joinTest() {
   Map<String, String> map = MapUtil.newHashMap();
   map.put("a", "1");
   map.put("b", "2");
   map.put("c", "1");
   // join
   String str = MapUtil.join(map, ",", "-");
   System.out.println(str);
}

过滤转换操作

  • filter(Map<K, V> map, K... keys): 过滤Map保留指定键值对,如果键不存在跳过

  • filter(Map<K, V> map, Filter<Entry<K, V>> filter):自定义过滤行为

  • map(Map<K, V> map, BiFunction<K, V, R> biFunction):通过biFunction自定义一个规则,此规则将原Map中的元素转换成新的元素,生成新的Map返回

@Test
public void filterTest() {
   Map<String, String> map = MapUtil.newHashMap();
   map.put("a", "1");
   map.put("b", "2");
   map.put("c", "3");
   map.put("d", "4");
   // 过滤出被2整除的数据
   Map<String, String> map2 = MapUtil.filter(map, t -> Convert.toInt(t.getValue()) % 2 == 0);
   Assert.assertEquals(2, map2.size());
   Assert.assertEquals("2", map2.get("b"));
   Assert.assertEquals("4", map2.get("d"));
}
@Test
public void mapTest() {
   // Add test like a foreigner
   Map<Integer, String> adjectivesMap = MapUtil.<Integer, String>builder()
           .put(0, "lovely")
           .put(1, "friendly")
           .put(2, "happily")
           .build();
   // 转换操作
   Map<Integer, String> resultMap = MapUtil.map(adjectivesMap, (k, v) -> v + " " + PeopleEnum.values()[k].name().toLowerCase());
   Assert.assertEquals("lovely girl", resultMap.get(0));
   Assert.assertEquals("friendly boy", resultMap.get(1));
   Assert.assertEquals("happily child", resultMap.get(2));
}

获取get

get操作一定是map非常常用的方法,原生的get方法非常不好用,有时候还需要进行判断类型等。

Hutool开发MapUtil工具类使用示例

@Test
public void getTest() {
   Map<String, Object> map = MapUtil.newHashMap();
   map.put("a", "1");
   map.put("b", "2");
   map.put("c", "1");
   map.put("age", 20);
   String value = MapUtil.getStr(map, "a");
   Assert.assertEquals(value, "1");
   int val = MapUtil.getInt(map, "age", 18);
   Assert.assertTrue(val == 20);
}

来源:https://juejin.cn/post/7151591227803041823

标签:Hutool,MapUtil,工具类
0
投稿

猜你喜欢

  • Java语言实现简单FTP软件 FTP上传下载队列窗口实现(7)

    2021-07-25 04:01:58
  • SpringBoot实现文件上传与下载功能的示例代码

    2021-11-10 09:15:32
  • ElasticSearch添加索引代码实例解析

    2023-11-21 03:41:04
  • 如何利用Jackson序列化忽略指定类型的属性详解

    2023-11-16 09:01:27
  • Java高级面试题小结

    2023-11-23 07:34:00
  • 替换so文件来动态替换Flutter代码实现详解

    2023-06-23 16:24:06
  • JSch教程使用sftp协议实现服务器文件载操作

    2023-10-29 17:43:33
  • SpringIOC框架的简单实现步骤

    2021-10-28 21:44:35
  • SpringMVC bean加载控制的实现分析

    2023-08-08 18:46:19
  • Java内部类及其特点的讲解

    2023-06-09 19:39:41
  • MyBatis-Plus联表查询以及分页代码实例

    2023-11-26 01:51:32
  • Java实现经典游戏打砖块游戏的示例代码

    2021-06-25 13:30:16
  • java商城项目实战之购物车功能实现

    2023-11-02 21:17:43
  • mybatis-plus与JPA混合的使用方式

    2022-06-24 02:10:25
  • springboot整合@Retryable实现重试功能的示例代码

    2023-11-27 11:08:20
  • Java制作智能拼图游戏原理及代码

    2022-08-02 21:46:57
  • 解决Spring Cloud Feign 请求时附带请求头的问题

    2022-12-11 04:29:46
  • Java获取json数组对象的实例讲解

    2023-08-24 14:55:28
  • java二叉树面试题详解

    2021-06-13 08:40:23
  • Android带进度的圆形进度条

    2023-08-05 21:47:18
  • asp之家 软件编程 m.aspxhome.com