Hutool開發(fā)MapUtil工具類使用示例
概述
Hutool是一個(gè)小而全的Java工具類庫(kù),通過靜態(tài)方法封裝,降低相關(guān)API的學(xué)習(xí)成本,提高工作效率,使Java擁有函數(shù)式語(yǔ)言般的優(yōu)雅,讓Java語(yǔ)言也可以“甜甜的”。
目前公司項(xiàng)目中主要采用Hutool作為項(xiàng)目的工具包,相對(duì)于google的guava, hutool的工具類采用中文注釋,更加符合國(guó)人使用。所謂知己知彼,我們需要了解Hutool都具有什么樣的功能,才能夠最大化發(fā)揮它的價(jià)值。
本文主要就hutool 5.8.8版本, 介紹其中一個(gè)操作Map哈希表的工具類MapUtil,我這邊主要介紹幾個(gè)比較好用的方法。
行列互轉(zhuǎn)
大家是不是遇到過將多個(gè)map以key進(jìn)行分組,然后相同key下的value合并成一個(gè)list的場(chǎng)景,現(xiàn)在可以通過下面的行列互轉(zhuǎn)的方式輕松解決。
- toListMap:行轉(zhuǎn)列,合并相同的鍵,值合并為列表。
- toMapList: 列轉(zhuǎn)行。將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); // 調(diào)用toListMap, 將list轉(zhuǎn)為map System.out.println("toListMap: "); Map<String, List<String>> listMap = MapUtil.toListMap(maps); System.out.println(listMap); // toMapList, 將map轉(zhuǎn)為list System.out.println("toMapList: "); List<Map<String, String>> mapList = MapUtil.toMapList(listMap); System.out.println(mapList); }
結(jié)果:
鍵值互換
- 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); }
結(jié)果:
sort排序操作
sort(Map<K, V> map): 排序已有Map,Key有序的Map,使用默認(rèn)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"); // 排序, 不會(huì)改變?cè)瓉淼闹? Map<String, String> newMap = MapUtil.sortByValue(map, true); System.out.println(newMap); }
結(jié)果:
join連接操作
- join: 將map轉(zhuǎn)成字符串
- sortJoin: 根據(jù)參數(shù)排序后拼接為字符串,常用于簽名
- joinIgnoreNull: 將map轉(zhuǎn)成字符串,忽略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); }
過濾轉(zhuǎn)換操作
- filter(Map<K, V> map, K... keys): 過濾Map保留指定鍵值對(duì),如果鍵不存在跳過
- filter(Map<K, V> map, Filter<Entry<K, V>> filter):自定義過濾行為
- map(Map<K, V> map, BiFunction<K, V, R> biFunction):通過biFunction自定義一個(gè)規(guī)則,此規(guī)則將原Map中的元素轉(zhuǎn)換成新的元素,生成新的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整除的數(shù)據(jù) 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(); // 轉(zhuǎn)換操作 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方法非常不好用,有時(shí)候還需要進(jìn)行判斷類型等。
@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); }
總結(jié)
本文總結(jié)了MapUtil常用的一些操作,具體的大家可以查看源碼,都非常簡(jiǎn)單,更多關(guān)于Hutool MapUtil工具類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
用Spring Native將SpringBoot程序轉(zhuǎn)換為GraalVM
這篇文章主要介紹了用Spring Native將SpringBoot程序轉(zhuǎn)換為GraalVM的方法,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot,感興趣的朋友可以了解下2021-04-04使用springboot整合mybatis-plus實(shí)現(xiàn)數(shù)據(jù)庫(kù)的增刪查改示例
這篇文章主要介紹了使用springboot整合mybatis-plus實(shí)現(xiàn)數(shù)據(jù)庫(kù)的增刪查改示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Java與Mysql鎖相關(guān)知識(shí)總結(jié)
這篇文章主要介紹了Java與Mysql鎖相關(guān)知識(shí)總結(jié)的相關(guān)資料,需要的朋友可以參考下2023-04-04Java連接FTP服務(wù)器并使用ftp連接池進(jìn)行文件操作指南
使用FTP最主要的功能是對(duì)文件進(jìn)行管理,下面這篇文章主要給大家介紹了關(guān)于Java連接FTP服務(wù)器并使用ftp連接池進(jìn)行文件操作的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08SpringBoot調(diào)用第三方接口的幾種方式小結(jié)
在項(xiàng)目中調(diào)用第三方接口時(shí),確實(shí)需要根據(jù)項(xiàng)目的技術(shù)棧、架構(gòu)規(guī)范以及具體的業(yè)務(wù)需求來選擇最適合的調(diào)用方式,下面我們就介紹幾種調(diào)用第三方接口的實(shí)現(xiàn)方式以及代碼示例,需要的朋友可以參考下2024-07-07