日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

hutool中的threadutil_Hutool - 好用的Java工具类库

發(fā)布時(shí)間:2024/10/6 java 226 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hutool中的threadutil_Hutool - 好用的Java工具类库 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Hutool是一個(gè)Java工具包,它幫助我們簡(jiǎn)化每一行代碼,避免重復(fù)造輪子。如果你有需要用到某些工具方法的時(shí)候,不妨在Hutool里面找找,可能就有。本文將對(duì)Hutool中的常用工具類和方法進(jìn)行介紹。9 n, v+ c0 |" i$ l

一、簡(jiǎn)介. c; v) d: q8 C" {

0 j2 p" f, }, [9 Y3 F% S5 j一個(gè)Java基礎(chǔ)工具類,對(duì)文件、流、加密解密、轉(zhuǎn)碼、正則、線程、XML等JDK方法進(jìn)行封裝,組成各種Util工具類,同時(shí)提供以下組件:U9 V9 v- w! `, O& Z# p9 U

8 w/ s0 U* R8 w

hutool-core 核心,包括Bean操作、日期、各種Util等% v" C9 m& l& u/ S, f* X5 h5 d

hutool-aop JDK動(dòng)態(tài)代理封裝,提供非IOC下的切面支持+ E. ~# W" h4 H: Z$ _

hutool-bloomFilter 布隆過(guò)濾,提供一些Hash算法的布隆過(guò)濾

3 E& Q- u3 Z6 V0 ^3 M

hutool-cache 緩存

! Q6 n* w1 f) e

hutool-cron 定時(shí)任務(wù)模塊,提供類Crontab表達(dá)式的定時(shí)任務(wù)

! a, ~& q8 x8 H) @8 v7 r

hutool-crypto 加密解密模塊

; u??O$ D+ w??X9 G% F' ^

hutool-db JDBC封裝后的數(shù)據(jù)操作,基于ActiveRecord思想

' S9 \1 y- H' I# _

hutool-dfa 基于DFA模型的多關(guān)鍵字查找

: H" }" G- H" b- ?: ^; s

hutool-extra 擴(kuò)展模塊,對(duì)第三方封裝(模板引擎、郵件等)+ B0 `- @7 j& _) {' {* _

hutool-http 基于HttpUrlConnection的Http客戶端封裝. t1 b+ u- _# ]& Z4 g- J

hutool-log 自動(dòng)識(shí)別日志實(shí)現(xiàn)的日志門面1 W& u* j! d( f- `6 L- n

hutool-script 腳本執(zhí)行封裝,例如Javascript

" t: z1 `7 [2 @( \1 K

hutool-setting 功能更強(qiáng)大的Setting配置文件和Properties封裝

2 f4 `; V: D4 D/ z' f3 ~( a

hutool-system 系統(tǒng)參數(shù)調(diào)用封裝(JVM信息等)

9 N- T9 Y0 l??a4 V

hutool-json JSON實(shí)現(xiàn)

! K2 N) _' i+ v8 A

hutool-captcha 圖片驗(yàn)證碼實(shí)現(xiàn)( h5 f6 P1 m7 {, q9 H' u二、安裝( r8 M7 D! Q" y4 L& I, K

2 t8 @! }3 t/ |. W4 K

maven項(xiàng)目在pom.xml添加以下依賴即可:

+ p7 X0 \+ s: Z2 r7 Q? ? cn.hutool? ? hutool-all? ? 5.2.2三、常用工具類

4 Y; q??~& V) J# p5 w# {0 h??d; s! [* r* j5 U* Q7 ~4 K

1. DateUtil

% F1 q* i& D% u% p9 M8 d8 G, p5 g

4 S% G) |; K' f) P& I$ |??y' T日期時(shí)間工具類,定義了一些常用的日期時(shí)間操作方法。( s1 d$ l) Q??M2 I9 Y3 n% y, B

Date、long、Calendar之間的相互轉(zhuǎn)換9 `" V2 x+ A, @

3 t??L: X7 R% z% m2 H//當(dāng)前時(shí)間Date date = DateUtil.date();//當(dāng)前時(shí)間Date date2 = DateUtil.date(Calendar.getInstance());//當(dāng)前時(shí)間Date date3 = DateUtil.date(System.currentTimeMillis());//當(dāng)前時(shí)間字符串,格式:yyyy-MM-dd HH:mm:ssString now = DateUtil.now();//當(dāng)前日期字符串,格式:yyyy-MM-ddString today= DateUtil.today();字符串轉(zhuǎn)日期

9 e9 v* _3 a- G' _! K, `0 [! Z5 g) J( E8 i2 x

DateUtil.parse方法會(huì)自動(dòng)識(shí)別一些常用格式,包括:

+ t. J2 X" k& G; X??[7 }% J6 I, K2 r7 E8 z

yyyy-MM-dd HH:mm:ss2 b4 Q! c2 z??W, x8 J

yyyy-MM-dd& X! @6 R6 B5 {3 N1 N9 [- o* v9 @4 q

HH:mm:ss

( v2 B- j7 F( f+ h

yyyy-MM-dd HH:mm/ `! Y5 l. H( N; m/ Q

yyyy-MM-dd HH:mm:ss.SSS

1 M7 Y, }/ l: v??Z! A7 S% ~String dateStr = "2020-03-01";Date date = DateUtil.parse(dateStr);我們也可以使用自定義日期格式轉(zhuǎn)化:

" X* B' X7 a4 t' |String dateStr = "2020/03/02";Date date = DateUtil.parse(dateStr, "yyyy/MM/dd");格式化日期輸出* |: M& T9 C0 M; c1 a) k/ Y

: x??y* E. z7 j3 `

//結(jié)果 2020/03/01String format = DateUtil.format(date, "yyyy/MM/dd");//常用格式的格式化String formatDate = DateUtil.formatDate(date);String formatDateTime = DateUtil.formatDateTime(date);String formatTime = DateUtil.formatTime(date);獲取Date對(duì)象的某個(gè)部分

6 f- i2 w3 X0 y! O+ o# L2 _' ~/ M# J6 z! S4 \

//獲得年的部分int year = DateUtil.year(date);//獲得月份,從0開始計(jì)數(shù)int month = DateUtil.month(date);//獲得月份,從0開始計(jì)數(shù)Month monthEnum = DateUtil.monthEnum(date);//獲得日int dayOfMonth = DateUtil.dayOfMonth(date);//獲得星期數(shù),從周日算起int dayOfWeek = DateUtil.dayOfWeek(date);//獲得星期枚舉Week dayOfWeekEnum = DateUtil.dayOfWeekEnum(date);開始和結(jié)束時(shí)間) b* @/ q7 i& H) D% O

1 ~% p$ q* i3 P& ~5 B- ?5 S) {

有的時(shí)候我們需要獲得每天的開始時(shí)間、結(jié)束時(shí)間,每月的開始和結(jié)束時(shí)間等等,DateUtil也提供了相關(guān)方法:2 y& s' h% F2 N: B5 o6 b+ f, Z1 l

//一天的開始,結(jié)果:2020-03-01 00:00:00Date beginOfDay = DateUtil.beginOfDay(date);//一天的結(jié)束,結(jié)果:2020-03-01 23:59:59Date endOfDay = DateUtil.endOfDay(date);日期時(shí)間偏移

- k' P" E: C7 L6 y2 c' A% P

' v??M' L4 _& V$ |& A日期或時(shí)間的偏移指針對(duì)某個(gè)日期增加或減少分、小時(shí)、天等等,達(dá)到日期變更的目的。Hutool也針對(duì)其做了大量封裝

0 P( s# g??p??i' w5 y& v% o# s9 [$ [Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);DateTime newDate2 = DateUtil.offsetDay(date, 3);DateTime newDate3 = DateUtil.offsetHour(date, -3);針對(duì)當(dāng)前時(shí)間,提供了簡(jiǎn)化的偏移方法(例如昨天、上周、上個(gè)月等):% e4 f+ i% B. ?' \# n3 s

//昨天DateUtil.yesterday()//明天DateUtil.tomorrow()//上周DateUtil.lastWeek()//下周DateUtil.nextWeek()//上個(gè)月DateUtil.lastMonth()//下個(gè)月DateUtil.nextMonth()日期時(shí)間差, p: {% e3 P4 C: B2 E

& S& C' K* j- C3 X; U7 V( ?有時(shí)候我們需要計(jì)算兩個(gè)日期之間的時(shí)間差(相差天數(shù)、相差小時(shí)數(shù)等等),Hutool將此類方法封裝為between方法:

+ B1 j+ S6 n; a3 B+ {% }long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);計(jì)時(shí)器: k$ s# A9 _5 v$ u) Y: S. [

- Z8 d# X: K- h/ U: b* O0 `' I計(jì)時(shí)器用于計(jì)算某段代碼或過(guò)程花費(fèi)的時(shí)間- c2 c$ D& z* n! g

TimeInterval timer = DateUtil.timer();//---------------------------------//-------這是執(zhí)行過(guò)程//---------------------------------timer.interval();//花費(fèi)毫秒數(shù)timer.intervalRestart();//返回花費(fèi)時(shí)間,并重置開始時(shí)間timer.intervalMinute();//花費(fèi)分鐘數(shù)其它! U- `: q+ Y4 G* l' p) y

) M( f6 R& k5 a1 x1 I' ?//年齡DateUtil.ageOfNow("1993-03-01");//是否閏年DateUtil.isLeapYear(2017);2. Convert

; D( X. ]% m) |: D- l* ?! T# N; W' I6 A: M$ }??a5 A

類型轉(zhuǎn)換工具類,用于各種類型數(shù)據(jù)的轉(zhuǎn)換。里面封裝了針對(duì)Java常見(jiàn)類型的轉(zhuǎn)換,用于簡(jiǎn)化類型轉(zhuǎn)換。Convert類中大部分方法為toXXX,參數(shù)為Object,可以實(shí)現(xiàn)將任意可能的類型轉(zhuǎn)換為指定類型。同時(shí)支持第二個(gè)參數(shù)defaultValue用于在轉(zhuǎn)換失敗時(shí)返回一個(gè)默認(rèn)值。

% Y6 d0 O4 A8 S* u( `7 F/ A6 {Java常見(jiàn)類型轉(zhuǎn)換

, F- l5 F1 u. ]9 P5 ^! w??q: K5 i5 p# B: s& _

8 N+ b0 m7 d$ P! n& y- |

轉(zhuǎn)換為字符串:

# @' {- ^* T: e* M3 @9 K5 N- B- hint a = 1;//aStr為"1"String aStr = Convert.toStr(a);long[] b = {1,2,3,4,5};//bStr為:"[1, 2, 3, 4, 5]"String bStr = Convert.toStr(b);" b. {8 w8 O8 o8 M5 w8 p; W2 M

轉(zhuǎn)換為指定類型數(shù)組:

8 i??o" J. {1 }String[] b = { "1", "2", "3", "4" };//結(jié)果為Integer數(shù)組Integer[] intArray = Convert.toIntArray(b);long[] c = {1,2,3,4,5};//結(jié)果為Integer數(shù)組Integer[] intArray2 = Convert.toIntArray(c);1 y8 Z: E- a- \0 `/ C3 h

轉(zhuǎn)換為日期對(duì)象:. J0 O# u# @/ \" Z3 o" wString a = "2020-03-01";Date value = Convert.toDate(a);- p) |" Z8 A??H2 @9 h$ }/ V

轉(zhuǎn)換為集合

5 V' U7 ?6 }0 ~; ^Object[] a = {"a", "你", "好", "", 1};List list = Convert.convert(List.class, a);//從4.1.11開始可以這么用List list = Convert.toList(a);其它類型轉(zhuǎn)換* Y/ u: e' \' _- ^; Q" @% i! g

; g; ?; G, T+ o( Q' U$ A# {. h6 d8 d' ?

標(biāo)準(zhǔn)類型! c??Z/ E4 B; w6 q通過(guò)Convert.convert(Class, Object)方法可以將任意類型轉(zhuǎn)換為指定類型,Hutool中預(yù)定義了許多類型轉(zhuǎn)換,例如轉(zhuǎn)換為URI、URL、Calendar等等。

0 |( G) G??^2 y3 e2 X, ~& u; {; N??O* |1 ?4 [5 Q1 H

泛型類型0 a3 a, m+ q0 g??|8 u8 S5 N: {通過(guò)convert(TypeReference reference, Object value)方法,自行new一個(gè)TypeReference對(duì)象可以對(duì)嵌套泛型進(jìn)行類型轉(zhuǎn)換。例如,我們想轉(zhuǎn)換一個(gè)對(duì)象為L(zhǎng)ist類型,此時(shí)傳入的標(biāo)準(zhǔn)Class就無(wú)法滿足要求,此時(shí)我們可以這樣:

% i" l2 x2 |4 D3 I' J; `/ \Object[] a = { "a", "你", "好", "", 1 };List list = Convert.convert(new TypeReference() {}, a);通過(guò)TypeReference實(shí)例化后制定泛型類型,即可轉(zhuǎn)換對(duì)象為我們想要的目標(biāo)類型。9 o) ], ~; v! f3 K% u- Y

半角和全角轉(zhuǎn)換

! l* ^, p, L??n. d$ s# V2 Q5 d6 o+ e5 d

在很多文本的統(tǒng)一化中這兩個(gè)方法非常有用,主要對(duì)標(biāo)點(diǎn)符號(hào)的全角半角轉(zhuǎn)換。

/ @! p+ H. b3 z: P9 v1 K半角轉(zhuǎn)全角:$ a1 {1 c" [: A- {6 A1 z7 b" a

String a = "123456789,$()?!:;";//結(jié)果為:"123456789,$()?!:;"String sbc = Convert.toSBC(a);全角轉(zhuǎn)半角:

+ j5 j6 @1 t5 x/ {String a = "123456789,$()?!:;";//結(jié)果為"123456789,$()?!:;"String dbc = Convert.toDBC(a);16進(jìn)制(Hex); c/ G- [9 O& C+ x??\" e" q. h5 [

3 f# f! W, u2 W

在很多加密解密,以及中文字符串傳輸(比如表單提交)的時(shí)候,會(huì)用到16進(jìn)制轉(zhuǎn)換,就是Hex轉(zhuǎn)換,為此Hutool中專門封裝了HexUtil工具類,考慮到16進(jìn)制轉(zhuǎn)換也是轉(zhuǎn)換的一部分,因此將其方法也放在Convert類中,便于理解和查找,使用同樣非常簡(jiǎn)單:

: q8 P; s9 |$ Y6 {轉(zhuǎn)為16進(jìn)制(Hex)字符串8 Z6 n3 i- K9 P9 F* h, d. w

String a = "字符串";String hex = Convert.toHex(a, CharsetUtil.CHARSET_UTF_8);將16進(jìn)制(Hex)字符串轉(zhuǎn)為普通字符串:

, s4 E0 z: k% v$ i- gString hex = "e5ad97e7aca6e4b8b2";String raw = Convert.hexToStr(hex, CharsetUtil.CHARSET_UTF_8);因?yàn)樽址疇可娴骄幋a問(wèn)題,因此必須傳入編碼對(duì)象,此處使用UTF-8編碼。 toHex方法同樣支持傳入byte[],同樣也可以使用hexToBytes方法將16進(jìn)制轉(zhuǎn)為byte[]

J7 y* j1 B6 W& X( m* o; [1 VUnicode和字符串轉(zhuǎn)換

- {8 l5 Q$ L& m& t/ w" L

/ r! A??K4 ~7 p3 b# G+ Q6 Q與16進(jìn)制類似,Convert類同樣可以在字符串和Unicode之間輕松轉(zhuǎn)換:+ p2 t' g: y) P5 M, y??P

String unicode = Convert.strToUnicode(a);String raw = Convert.unicodeToStr(unicode);編碼轉(zhuǎn)換0 \8 _- v* g4 [

7 e( N9 L5 U7 ], z2 Y! @2 M

在接收表單的時(shí)候,我們常常被中文亂碼所困擾,其實(shí)大多數(shù)原因是使用了不正確的編碼方式解碼了數(shù)據(jù)。于是Convert.convertCharset方法便派上用場(chǎng)了,它可以把亂碼轉(zhuǎn)為正確的編碼方式:V. R: E' e7 W: T

String a = "我不是亂碼";//轉(zhuǎn)換后result為亂碼String result = Convert.convertCharset(a, CharsetUtil.UTF_8, CharsetUtil.ISO_8859_1);String raw = Convert.convertCharset(result, CharsetUtil.ISO_8859_1, "UTF-8");Assert.assertEquals(raw, a);時(shí)間單位轉(zhuǎn)換

+ ?- [3 i$ b# F$ F. T

2 \) z% q) w$ Y/ I0 nConvert.convertTime方法主要用于轉(zhuǎn)換時(shí)長(zhǎng)單位,比如一個(gè)很大的毫秒,我想獲得這個(gè)毫秒數(shù)對(duì)應(yīng)多少分:3 _3 P4 Q/ o. @

long a = 4535345;//結(jié)果為:75long minutes = Convert.convertTime(a, TimeUnit.MILLISECONDS, TimeUnit.MINUTES);金額大小寫轉(zhuǎn)換

+ J8 s. g& s8 J# F, o& k# O6 P??j* `; L+ F3 K' Z

面對(duì)財(cái)務(wù)類需求,Convert.digitToChinese將金錢數(shù)轉(zhuǎn)換為大寫形式:

6 [( K6 t) G) m3 |, g, l9 D! ]* bdouble money = 1234.56;//結(jié)果為:"壹仟貳佰叁拾肆元伍角陸分"String digitUppercase = Convert.digitToChinese(a);注意 轉(zhuǎn)換為大寫只能精確到分(小數(shù)點(diǎn)兒后兩位),之后的數(shù)字會(huì)被忽略。% ]+ }& A* z7 M/ F* }原始類和包裝類轉(zhuǎn)換

, l1 C1 |* T0 M# s, ^6 F5 o4 v. E, g9 w8 }2 X, a* K" M

有的時(shí)候,我們需要將包裝類和原始類相互轉(zhuǎn)換(比如Integer.classs 和 int.class),這時(shí)候我們可以:

/ K$ d, W) U- t//去包裝Class wrapClass = Integer.class;//結(jié)果為:int.classClass unWraped = Convert.unWrap(wrapClass);//包裝Class primitiveClass = long.class;//結(jié)果為:Long.classClass wraped = Convert.wrap(primitiveClass);3. StrUtil+ _5 F+ R' @2 v7 c

; A. U! f4 P( A# Y' M1 ~

字符串工具類,定義了一些常用的字符串操作方法。/ H& ?$ L' K( A; z* Z2 L8 p

hasBlank、hasEmpty方法% M) S??u1 M' N% h0 i

8 Q1 B* I8 S7 M6 P# E" ?

就是給定一些字符串,如果一旦有空的就返回true,常用于判斷好多字段是否有空的(例如web表單數(shù)據(jù))。7 K& D" s* c+ ~# K

這兩個(gè)方法的區(qū)別是hasEmpty只判斷是否為null或者空字符串(""),hasBlank則會(huì)把不可見(jiàn)字符也算做空,isEmpty和isBlank同理。

2 y+ {: e% M+ \removePrefix、removeSuffix方法/ l# p+ v% P% t7 o( K

8 W8 l' R$ ~0 ~- [* L3 E1 P這兩個(gè)是去掉字符串的前綴后綴的,例如去個(gè)文件名的擴(kuò)展名啥。

; g, q& F3 E/ v) b0 l0 `: hString fileName = StrUtil.removeSuffix("pretty_girl.jpg", ".jpg")??//fileName -> pretty_girl還有忽略大小寫的removePrefixIgnoreCase和removeSuffixIgnoreCase都比較實(shí)用。- ?. h??w; D' h6 ?- c3 q* g; N2 c

sub方法1 K8 e3 n4 V: y2 C+ f9 j2 }

/ s0 X% j4 C. [- T5 ?subString方法越界會(huì)報(bào)異常,得自己判斷,sub把各種情況判斷都加進(jìn)來(lái)了,而且index的位置還支持負(fù)數(shù),-1表示最后一個(gè)字符,如果不小心把第一個(gè)位置和第二個(gè)位置搞反了,也會(huì)自動(dòng)修正

/ A4 u# N& A3 }( j7 i4 iString str = "abcdefgh";String strSub1 = StrUtil.sub(str, 2, 3);String strSub2 = StrUtil.sub(str, 2, -3); String strSub3 = StrUtil.sub(str, 3, 2); format方法

" @0 t5 h# w/ o1 V7 D* [! x; _% W8 T( w, p

String template = "{}和{}";String str = StrUtil.format(template, "我", "你");參數(shù)是Object類型,傳別的類型會(huì)自動(dòng)調(diào)用toString()方法。

7 k/ ~8 J. }1 D* n4. NumberUtil

! Q??M: Q4 [/ v. P% q/ l2 I+ l??^??k0 _/ H) T

數(shù)字處理工具類,可用于各種類型數(shù)字的加減乘除操作及判斷類型。

* M% o( C1 F5 h+ Wdouble n1 = 1.234;double n2 = 1.234;double result;//對(duì)float、double、BigDecimal做加減乘除操作result = NumberUtil.add(n1, n2);result = NumberUtil.sub(n1, n2);result = NumberUtil.mul(n1, n2);result = NumberUtil.div(n1, n2);//保留兩位小數(shù)BigDecimal roundNum = NumberUtil.round(n1, 2);String n3 = "1.234";//判斷是否為數(shù)字、整數(shù)、浮點(diǎn)數(shù)NumberUtil.isNumber(n3);NumberUtil.isInteger(n3);NumberUtil.isDouble(n3);5. BeanUtil

, W2 J3 E8 K$ c/ k% X1 b' g??q1 Z% `3 e: H' x

JavaBean的工具類,可用于Map與JavaBean對(duì)象的互相轉(zhuǎn)換以及對(duì)象屬性的拷貝。

7 D) n4 k% E6 X1 ^8 v& {/ J1 nMap轉(zhuǎn)Bean; q% b7 l4 O8 H/ H) T

& p, A7 A. I1 a% t, K% `7 ^: V提供了Map對(duì)象鍵值對(duì)注入Bean,其方法有:: E# i. S7 O( [8 u" z5 m

" f; H) D) z% C

BeanUtil.fillBeanWithMap 使用Map填充bean4 J/ q! N$ R3 eHashMap map = CollUtil.newHashMap();map.put("name", "Joe");map.put("age", 12);map.put("openId", "DFDFSDFWERWER");Person person = BeanUtil.fillBeanWithMap(map, new Person(), false);" w8 M! M7 H) u1 }+ D: l

BeanUtil.fillBeanWithMapIgnoreCase 使用Map填充bean,忽略大小寫

; p% E' o8 O" r, G1 H; c??yHashMap map = CollUtil.newHashMap();map.put("Name", "yxm");map.put("aGe", 12);map.put("openId", "DFDFSDFWERWER");Person person = BeanUtil.fillBeanWithMapIgnoreCase(map, new Person(), false);同時(shí)提供了map轉(zhuǎn)bean的方法,與fillBean不同的是,此處并不是傳Bean對(duì)象,而是Bean類,Hutool會(huì)自動(dòng)調(diào)用默認(rèn)構(gòu)造方法創(chuàng)建對(duì)象。當(dāng)然,前提是Bean類有默認(rèn)構(gòu)造方法(空構(gòu)造),這些方法有:6 ?* C3 q( H2 k5 c+ r: o

& H0 V7 }9 y3 X9 q

mapToBean,mapToBeanIgnoreCase0 o, |( h: E; i2 @4 u// 設(shè)置別名,用于對(duì)應(yīng)bean的字段名HashMap mapping = CollUtil.newHashMap();mapping.put("a_name", "name");mapping.put("b_age", "age");Person person = BeanUtil.mapToBean(map, Person.class, CopyOptions.create().setFieldMapping(mapping));Bean轉(zhuǎn)為Map

+ A. H5 }7 G??e( _, x+ g# X3 T1 [??O0 `8 ~, D; d) ~$ B

BeanUtil.beanToMap方法則是將一個(gè)Bean對(duì)象轉(zhuǎn)為Map對(duì)象。' F1 f9 N( o$ B8 e% l, [# W0 o% a; M3 ]

Person person = new Person();person.setAge(14);person.setOpenid("11213232");person.setName("測(cè)試A11");person.setSubName("sub名字");Map map = BeanUtil.beanToMap(person);Bean轉(zhuǎn)Bean( c# E( a6 U1 B. h- P/ X

8 M! h9 e4 R( `- E4 GBean之間的轉(zhuǎn)換主要是相同屬性的復(fù)制,因此方法名為copyProperties,此方法支持Bean和Map之間的字段復(fù)制。: }5 j" o0 T3 W* l7 o' f

BeanUtil.copyProperties方法同樣提供一個(gè)CopyOptions參數(shù)用于自定義屬性復(fù)制。

; q" |# i4 }$ q4 c( u" OPerson p1 = new Person();p1.setSlow(true);p1.setName("測(cè)試");p1.setSubName("sub測(cè)試");Map map = MapUtil.newHashMap();BeanUtil.copyProperties(p1, map);PmsBrand brand = new PmsBrand();brand.setId(1L);brand.setName("小米");brand.setShowStatus(0);//Bean轉(zhuǎn)MapMap map = BeanUtil.beanToMap(brand);//Map轉(zhuǎn)BeanPmsBrand mapBrand = BeanUtil.mapToBean(map, PmsBrand.class, false);//Bean屬性拷貝PmsBrand copyBrand = new PmsBrand();BeanUtil.copyProperties(brand, copyBrand);6. ReflectUtil

3 e, t. Z7 B1 x6 I0 T0 b& P* O! [& y* z" C: ~0 J1 v2 O/ b

Java反射工具類,可用于反射獲取類的方法及創(chuàng)建對(duì)象。* S2 ^: D( s" t* g" Z6 h( j4 c; S

//獲取某個(gè)類的所有方法Method[] methods = ReflectUtil.getMethods(PmsBrand.class);//獲取某個(gè)類的指定方法Method method = ReflectUtil.getMethod(PmsBrand.class, "getId");//使用反射來(lái)創(chuàng)建對(duì)象PmsBrand pmsBrand = ReflectUtil.newInstance(PmsBrand.class);//反射執(zhí)行對(duì)象的方法ReflectUtil.invoke(pmsBrand, "setId", 1);7. CollUtil6 \/ `: u7 ]8 ?, j( p: ^

, G# B2 }+ I" t& x% b6 m; m( M" K0 ~5 `集合操作的工具類,定義了一些常用的集合操作。

; D/ a& `- O; s- h( E//數(shù)組轉(zhuǎn)換為列表String[] array = new String[]{"a", "b", "c", "d", "e"};List list = CollUtil.newArrayList(array);//join:數(shù)組轉(zhuǎn)字符串時(shí)添加連接符號(hào)String joinStr = CollUtil.join(list, ",");//將以連接符號(hào)分隔的字符串再轉(zhuǎn)換為列表List splitList = StrUtil.split(joinStr, ',');//創(chuàng)建新的Map、Set、ListHashMap newMap = CollUtil.newHashMap();HashSet newHashSet = CollUtil.newHashSet();ArrayList newList = CollUtil.newArrayList();//判斷列表是否為空CollUtil.isEmpty(list);8. MapUtil. H0 E+ ^0 u0 y3 M7 e: S

% b" E$ x5 v' i2 j

Map操作工具類,可用于創(chuàng)建Map對(duì)象及判斷Map是否為空。& G" \& g/ e* s/ e6 z& _

//將多個(gè)鍵值對(duì)加入到Map中Map map = MapUtil.of(new String[][]{? ? {"key1", "value1"},? ? {"key2", "value2"},? ? {"key3", "value3"}});//判斷Map是否為空MapUtil.isEmpty(map);MapUtil.isNotEmpty(map);9. AnnotationUtil

% C6 y; r3 ~. j8 g1 {. }# Z

' j, a$ x; V8 |/ j/ H; a注解工具類,可用于獲取注解與注解中指定的值。4 g! E??|4 K3 H: h" }, d# O

//獲取指定類、方法、字段、構(gòu)造器上的注解列表Annotation[] annotationList = AnnotationUtil.getAnnotations(HutoolController.class, false);//獲取指定類型注解Api api = AnnotationUtil.getAnnotation(HutoolController.class, Api.class);//獲取指定類型注解的值Object annotationValue = AnnotationUtil.getAnnotationValue(HutoolController.class, RequestMapping.class);10. SecureUtil- g8 l1 |+ c. |# }2 `

8 ]8 A1 F) |3 h+ O2 u& B加密解密工具類,可用于MD5加密。

6 _, b" u/ l% Y- j4 E" ?//MD5加密String str = "123456";String md5Str = SecureUtil.md5(str);LOGGER.info("secureUtil md5:{}", md5Str);其他工具類# N2 o) p8 |) u

, ^; U: p- H) r8 |# q# E

Hutool中的工具類很多,可以參考:https://www.hutool.cn/

; g* c) d) E8 r& p9 A9 G' [四、項(xiàng)目源碼地址

* }8 a" Y* ~( f) [# ?! B( T/ D& s" c& V

https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-hutool

1 e! \4 h" Y7 b4 d9 h8 F* ???I" X; L4 z6 O. w

Java吧 收集整理 java論壇 www.java8.com

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的hutool中的threadutil_Hutool - 好用的Java工具类库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。