亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
目錄
開始上手
## 整體預(yù)覽圖
HTTP 網(wǎng)絡(luò)請求工具
字符串處理工具
集合相關(guān)處理工具
Collections
CollectionUtils
Lists
文件流處理工具
加解密工具類
JAVA bean 對象轉(zhuǎn)換工具
BeanUtils
MapStruct
緩存和限流器工具
Cache
RateLimiter
修煉完成
首頁 Java java教程 【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!

【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!

Sep 15, 2022 am 11:10 AM
開發(fā)工具

你還在因為加班熬夜而禿頭嗎?你還在因為奇葩需求而造輪子嗎?那你找對人了! !本文切身感受程式設(shè)計師之痛苦,背後默默吐血整理了一篇文章,希望對大家有幫助。衝沖衝! !

【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!

工欲善其事必先利其器

身為程式設(shè)計師,每天面對的事情就是寫程式和吹牛了。但總是覺得自己這兩件事沒有達(dá)到一個平衡點,總覺得每天寫程式碼的時間太多了,都沒有多少讓自己吹的時間了。不知道大家有沒有這些問題和疑惑呢?

我們已知程式設(shè)計師是最會偷懶的生物!哎!那麼問題來了,那怎麼摸魚時間還是這麼少呢?難道是我們太菜了嗎?不不不,可不要小瞧自己,那會是啥原因嘞?

答案就是,當(dāng)然是你還沒看這篇文章唄,本文切身感受程式設(shè)計師之痛苦,背後默默吐血整理了一篇文章,現(xiàn)在分享給大家,希望對大家有所幫助。

目錄

  • 整體預(yù)覽圖

  • JSON解析工具

  • HTTP網(wǎng)路請求工具

  • 字串處理工具

  • 集合處理工具

  • #檔案流處理工具

  • 加上解密工具

  • JAVA bean 物件轉(zhuǎn)換工具

  • 快取與限流工具


開始上手

## 整體預(yù)覽圖

本文會從圖中分類觸發(fā),介紹相關(guān)工具包,並簡單介紹使用。因為本文篇幅有限,所以只當(dāng)做是一個引子。具體細(xì)節(jié)還是都得大家在寫程式的時候慢慢體會。

【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!

JSON 解析工具

#json 解析工具在開發(fā)中有多常用相信不用我多說了吧,可以說是程式設(shè)計師天天用到的工具,這也是我將它放到第一個來說的原因,下面我們來一起看一下,概括和使用吧,GO!筆者我用的比較多的是 Fastjson ,它是阿里開源的一款進(jìn)行 JSON 解析的工具,用法也是相當(dāng)簡單。

【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!

1、

maven 導(dǎo)入pom 座標(biāo)

<dependency>
????<groupid>com.alibaba</groupid>
????<artifactid>fastjson</artifactid>
????<version>1.2.83</version>
</dependency>
2、

下面看怎麼使用

  • #JSON 字串與實體物件互相轉(zhuǎn)換
  • #
//?字符串轉(zhuǎn)對象
Studen?student?=?JSON.parseObject("{"name":"小明","age":18}",?Student.class);
//?對象轉(zhuǎn)字符串
String?str?=?JSON.toJSONString(student);
  • JSON 字串與JSONObject 互相轉(zhuǎn)換

JSONObject只是一種資料結(jié)構(gòu),可以理解為JSON格式的資料結(jié)構(gòu)(key-value結(jié)構(gòu)),可以使用put方法為json物件添加元素。 JSONObject可以很方便的轉(zhuǎn)換成字串,也可以很方便的把其他物件轉(zhuǎn)換成JSONObject物件

//?字符串轉(zhuǎn)JSONObject對象
JSONObject?jsonObject?=?JSONObject.parseObject("{"name":"小明","age":18}");
//?JSONObject對象轉(zhuǎn)字符串
String?str?=?jsonObject.toJSONString();
  • JSON 字串轉(zhuǎn)換為集合類別
//?定義解析字符串
String?studentListStr?=?"[{"name":"小明","age":18},{"name":"小牛","age":24}]";
//?解析為?List<student>
List<student>?studentList?=?JSON.parseArray(studentListStr,?Student.class);
//?定義解析字符串
String?studentMapStr?=?"{"name":"小明","age":18}";
//?解析為?Map<string>
Map<string>?stringStringMap?=?
JSONObject.parseObject(studentMapStr,?new?TypeReference<map>>(){});</map></string></string></student></student>

fastjson 就介紹到這裡,這裡只是介紹了簡單的使用,更詳細(xì)的用法請參考官方的文檔,裡面還有更多的用法等著你的哦~~


HTTP 網(wǎng)絡(luò)請求工具

除了 JSON 工具,作為一個優(yōu)秀的互聯(lián)網(wǎng)打工人,不學(xué)會網(wǎng)絡(luò)請求,怎么能夠在這個行業(yè)占有一席之地呢?HTTP 網(wǎng)絡(luò)請求工具你值得擁有~~ 根據(jù)我的個人意愿,我簡單介紹 httpclient的用法,因為我對這個比較熟悉

【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!

1、maven 導(dǎo)入 pom 坐標(biāo)

2、如何使用

  • GET 請求(無參)
/**
*?無參的?GET?請求
*/
public?static?void?noArgsGetHttp()?throws?IOException?{
????//?定義?httpclient
????CloseableHttpClient?httpClient?=?HttpClientBuilder.create().build();
????//?創(chuàng)建?httpGet
????HttpGet?httpGet?=?new?HttpGet("http://www.baidu.com");
????//?定義返回結(jié)果
????CloseableHttpResponse?execute?=?null;
????//?發(fā)送執(zhí)行
????execute?=?httpClient.execute(httpGet);
????//?獲取返回值
????HttpEntity?entity?=?execute.getEntity();
????System.out.println("響應(yīng)狀態(tài)為:"?+?execute.getStatusLine());
????if?(Objects.nonNull(entity))?{
????????System.out.println("響應(yīng)內(nèi)容長度為:"?+?entity.getContentLength());
????????System.out.println("響應(yīng)內(nèi)容為:"?+?EntityUtils.toString(entity));
????}
????//?釋放資源
????if?(httpClient?!=?null)?{
????????httpClient.close();
????}
????if?(execute?!=?null)?{
????????execute.close();
????}
}

響應(yīng)狀態(tài)為:HTTP/1.1 200 OK 響應(yīng)內(nèi)容長度為:-1 響應(yīng)內(nèi)容為:

  • GET 請求(有參)
?/**
*?有參的?GET?請求
*/
public?static?void?haveArgsGetHttp()?throws?IOException,?URISyntaxException?{
????//?定義?httpclient
????CloseableHttpClient?httpClient?=?HttpClientBuilder.create().build();
????//?創(chuàng)建參數(shù)列表
????List<namevaluepair>?valueParamsList?=?new?ArrayList();
????valueParamsList.add(new?BasicNameValuePair("studentId","1"));
????//?創(chuàng)建對應(yīng)請求?Uri
????URI?uri?=?new?URIBuilder()
????????.setScheme("http")
????????.setHost("localhost")
????????.setPath("/getStudentInfo")
????????.setParameters(valueParamsList)
????????.build();
????//?根據(jù)?Uri?創(chuàng)建?httpGet
????HttpGet?httpGet?=?new?HttpGet(uri);
????//?定義返回結(jié)果
????CloseableHttpResponse?execute?=?null;
????//?發(fā)送執(zhí)行
????execute?=?httpClient.execute(httpGet);
????//?獲取返回值
????HttpEntity?entity?=?execute.getEntity();
????System.out.println("響應(yīng)狀態(tài)為:"?+?execute.getStatusLine());
????if?(Objects.nonNull(entity))?{
????????System.out.println("響應(yīng)內(nèi)容長度為:"?+?entity.getContentLength());
????????System.out.println("響應(yīng)內(nèi)容為:"?+?EntityUtils.toString(entity));
????}
????//?釋放資源
????if?(httpClient?!=?null)?{
????????httpClient.close();
????}
????if?(execute?!=?null)?{
????????execute.close();
????}
}</namevaluepair>
  • POST 請求(有參數(shù))
/**
*?post?有參數(shù)
*/
public?static?void?haveArgsPosthttp()?throws?IOException?{
????//?獲得Http客戶端(可以理解為:你得先有一個瀏覽器;注意:實際上HttpClient與瀏覽器是不一樣的)
????CloseableHttpClient?httpClient?=?HttpClientBuilder.create().build();
????//?創(chuàng)建Post請求
????HttpPost?httpPost?=?new?HttpPost("http://localhost:12345/posttest");
????JSONUtil.Student?student?=?new?JSONUtil.Student();
????student.setName("潘曉婷");
????student.setAge(18);

????String?jsonString?=?JSON.toJSONString(student);
????StringEntity?entity?=?new?StringEntity(jsonString,?"UTF-8");
????//?post請求是將參數(shù)放在請求體里面?zhèn)鬟^去的;這里將entity放入post請求體中
????httpPost.setEntity(entity);
????httpPost.setHeader("Content-Type",?"application/json;charset=utf8");
????//?響應(yīng)模型
????CloseableHttpResponse?response?=?httpClient.execute(httpPost);
????//?從響應(yīng)模型中獲取響應(yīng)實體
????HttpEntity?responseEntity?=?response.getEntity();
????System.out.println("響應(yīng)狀態(tài)為:"?+?response.getStatusLine());
????if?(responseEntity?!=?null)?{
????????System.out.println("響應(yīng)內(nèi)容長度為:"?+?responseEntity.getContentLength());
????????System.out.println("響應(yīng)內(nèi)容為:"?+?EntityUtils.toString(responseEntity));
????}
????//?釋放資源
????if?(httpClient?!=?null)?{
????????httpClient.close();
????}
????if?(response?!=?null)?{
????????response.close();
????}
}

??!這樣一步一步總結(jié)下來好累啊,看到這里的小伙伴們,點一下手里的小贊。嘿嘿~~ 當(dāng)然我只是簡單介紹一下 httpClient 的使用,具體高深的使用方法和配置可以參考其他博主的詳細(xì)介紹,讓我們介紹下一個常用的工具吧。


字符串處理工具

字符串使我們開發(fā)中最常見的類型,也是我們最常需要操作的類型了。如果不知道字符串的常用工具,那在寫代碼的時候簡直就是場災(zāi)難?。?!

字符串判空,截取字符串、轉(zhuǎn)換大小寫、分隔字符串、比較字符串、去掉多余空格、拼接字符串、使用正則表達(dá)式等等。

StringUtils 給我們提供了非常豐富的選擇。我們著重以本類來介紹使用。

1、導(dǎo)入maven坐標(biāo)

<dependency>
????<groupid>org.apache.commons</groupid>
????<artifactid>commons-lang3</artifactid>
????<version>3.12.0</version>
</dependency>

2、常用方法介紹

  • 字符串判空 ???

(isNotBlankisBlanK)

String?str?=?"?";
//?是否不為空
boolean?res1?=?StringUtils.isNotBlank(str);
//?是否為空
boolean?res2?=?StringUtils.isBlank(str);

(isNotEmptyisEmpty)

String?str?=?"?";
//?是否不為空
boolean?res1?=?StringUtils.isNotEmpty(str);
//?是否為空
boolean?res2?=?StringUtils.isEmpty(str);

優(yōu)先推薦使用 isBlankisNotBlank 方法,因為 它會把空字符串也考慮進(jìn)去。

  • 分隔字符串 —— split —— ???
String?str2?=?"1,2,3";
String[]?split?=?StringUtils.split(str2);
System.out.println(Arrays.toString(split));

相較于 Stringsplit 方法來說,StringUtilssplit 方法不會有空指針異常

  • 判斷是否純數(shù)字 —— isNumeric —— ??

給定一個字符串,判斷它是否為純數(shù)字 可以使用isNumeric方法

String?str3?=?"1";
boolean?numeric?=?StringUtils.isNumeric(str3);
System.out.println(numeric);

當(dāng)然,這個工具類除了上面簡單的三個方法之外們還有其他很多對于我們來說很使用的方法,但是這里就不一一舉例了, 有興趣的小伙伴們可以看源碼統(tǒng)計一下


集合相關(guān)處理工具

哦吼~~看完了字符串的常用工具,重中之重的集合它來了,如果說沒有字符串,我們的程序就無法運行,那么沒有集合,我們將會是每天在加班的中度過了,出去后將會自豪的說,老板的車輪胎我也是做了貢獻(xiàn)的。

既然集合工具這么重要,那么當(dāng)然要重點介紹。學(xué)會相關(guān)工具的使用,真的是能讓我們事半功倍的,真的是能讓摸魚時間大大增加的,不信你看看。

【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!

Collections

它是 JAVA 的集合工具包,內(nèi)部包括了很多我們常用的方法,下圖展示了其中一些,方便食用!

【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!

  • 排序—— sort—— ???

在我們?nèi)粘i_發(fā)工作中,經(jīng)常會遇到一些集合排序的需求。sort 就可以很好的幫助我們做好這一點

List<integer>?list?=?new?ArrayList();
list.add(2);
list.add(1);
list.add(3);
//升序
Collections.sort(list);
System.out.println(list);
//降序
Collections.reverse(list);
System.out.println(list);</integer>

結(jié)果: [1, 2, 3] [3, 2, 1]

  • 獲取最大最小值 —— max / min ——???

最大值最小值是我們操作集合最常見的方法了吧??!Collections 就有現(xiàn)成的方法幫助我們實現(xiàn)

//?最大值最小值
List<integer>?intList?=?new?ArrayList();
intList.add(1);
intList.add(2);
intList.add(3);

Integer?max?=?Collections.max(intList);
Integer?min?=?Collections.min(intList);

System.out.println("集合元素最大值:"?+?max);
System.out.println("集合元素最小值:"?+?min);</integer>

結(jié)果:集合元素最大值:3 集合元素最小值:1

  • 轉(zhuǎn)換線程安全集合—— synchronizedList ——???

在多線程狀態(tài)下,普通集合會產(chǎn)生并發(fā)問題,比如 ArrayList 并發(fā)添加會產(chǎn)生空值情況,這時我們又不想改動我們之前的集合怎么辦? 我們簡單的通過Collections 的線程安全轉(zhuǎn)化就可以做到了,簡簡單單一行代碼就可以做到!是不是方便的很!

List<integer>?synchronizedList?=?Collections.synchronizedList(intList);</integer>

當(dāng)然,Collections 還有很多有用和有趣的方法等著我們?nèi)ヌ剿?,只是只是作為了一個拋轉(zhuǎn)引玉的效果,就不過多的贅述了。

CollectionUtils

我最常用的便是 CollecionUtils,它是 apache 開源的工具包。它的功能可以說是相當(dāng)強(qiáng)大的,不信你可以往下看看,反正你能想到的集合操作基本上它都有。

【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!

  • 集合判空—— isNotEmpty——???

我們最常用的集合方法,沒有之一,必須掌握它??!

List<string>?stringList?=?new?ArrayList();
boolean?notEmpty?=?CollectionUtils.isNotEmpty(stringList);
System.out.println("集合不是空的嗎?"+?notEmpty);</string>

集合不是空的嗎?false

  • 交集/并集/補(bǔ)集/差集——???

在開發(fā)中,經(jīng)常需要將多集合進(jìn)行交并補(bǔ)等的數(shù)學(xué)操作,不會還是傻傻的子集寫循環(huán)處理吧!那樣還能有摸魚的時間嗎?下面就是大大提升效率的工具?。?!

List<integer>?list1?=?new?ArrayList();
list1.add(1);
list1.add(2);
list1.add(3);
List<integer>?list2?=?new?ArrayList();
list2.add(3);
list2.add(4);
//?獲取并集
Collection<integer>?union?=?CollectionUtils.union(list1,?list2);
System.out.println(union);

//?獲取交集
Collection<integer>?intersection?=?CollectionUtils.intersection(list1,?list2);
System.out.println(intersection);

//獲取交集的補(bǔ)集
Collection<integer>?disjunctionList?=?CollectionUtils.disjunction(list1,?list2);
System.out.println(disjunctionList);

//?獲取差集
Collection<integer>?subtract?=?CollectionUtils.subtract(list1,?list2);
System.out.println(subtract);</integer></integer></integer></integer></integer></integer>

兩集合并集: ? [1, 2, 3, 4]

兩集合交集: [3]

兩集合交集的補(bǔ)集:[1, 2, 4]

兩集合差集: [1, 2]

  • 判斷兩集合是否相等——isEqualCollection——???
//?判斷兩集合是否相等
List<integer>?list3?=?new?ArrayList();
list1.add(3);
list1.add(4);
List<integer>?list4?=?new?ArrayList();
list2.add(3);
list2.add(4);
boolean?equalCollection?=?CollectionUtils.isEqualCollection(list3,?list4);
System.out.println("兩集合相等嗎?:"?+?equalCollection);</integer></integer>

兩集合相等嗎?:true

Lists

最后在集合的工具類中再補(bǔ)充一個 google 官方的java包,里面有很多我們想不到的超級方便的小工具,既然是說集合,我們說一下它里面的 Lists 類,也是超級好用的!

【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!

  • 快速初始化集合——newArrayList——???

相信大家在開發(fā)中,都有過初始化集合的需要吧!那么我們一般都是 新建一個 ArrayList 然后一個一個 add 進(jìn)去,現(xiàn)在告訴大家,不用這么麻煩,一個方法新建帶初始化全搞定,真香警告??!

//?快速初始化集合
ArrayList<integer>?integers1?=?Lists.newArrayList(1,?2,?3);
System.out.println(integers1);</integer>

[1, 2, 3]

  • 集合分頁——partition——???

有時候我們想將我們的大集合分散成為一些小集合,我們又不想手動操作怎么辦?這些痛點肯定已經(jīng)有人幫助我們想好了??!來來來,介紹一下?。?/p>

//?數(shù)組分頁
ArrayList<integer>?list7?=?Lists.newArrayList(1,?2,?3,?4,?5,?6,?7,?8,?9,?10);
List<list>>?partition?=?Lists.partition(list7,?5);
System.out.println(partition);</list></integer>

[ [1, 2, 3, 4, 5], [6, 7, 8, 9, 10] ]

介紹完了 集合相關(guān)的操作類,下面我們也要介紹一下文件流相關(guān)操作,這個操作在開發(fā)中也是經(jīng)常用到的。


文件流處理工具

相信我們在工作已經(jīng)厭煩了,經(jīng)常寫** IO 流相關(guān)的類了吧。經(jīng)常簡單的讀取和寫入一個文件,我們需要大費周章的去定義一些 InputStream OutputStream **等,感覺有一種殺雞用牛刀的錯覺。 介紹一個文件操作工具類,省去大量操作和關(guān)閉行為,超級好用,平常我可是經(jīng)常用的。

【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!

  • 將信息寫入文件——writeByteArrayToFile——???

最最常用的操作,怎么樣很簡單吧,就只用一行代碼,秒殺!

//?將?test?寫入?test.txt?文件
FileUtils.writeByteArrayToFile(new?File("C:\Users\test.txt"),?"test".getBytes());
  • 從文件讀取信息——readFileToByteArray——???

知道了怎么往文件里寫東西,他的好兄弟讀取我們也得知道??!

//?讀取?test.txt?文件
byte[]?bytes?=?FileUtils.readFileToByteArray(new?File("D:\Users\test.txt"));
System.out.println("讀取到的文本為:"?+?new?String(bytes));

讀取到的文本為:test

API 很多,我也不能一一為大家介紹,深入的了解還需要大家去,熟練地運用起來,并且是不是的去看看官方的文檔,查漏補(bǔ)缺,相信你也可以見識到很多讓你嘆為觀止的方法。


加解密工具類

平常我們經(jīng)常會遇到比如對用戶的密碼進(jìn)行加密 (MD5) ,校驗接口的簽名 (sha256) 加密等等 用到加密的場景雖然不是很多,但是有這樣的工具何樂而不為呢?

因為常用的加密方法并不多,這里介紹兩個方法給大家,想知道其他更多用法的伙伴們,去自己探索吧

【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!

//?MD5?加密
String?MD5?=?DigestUtils.md2Hex("123");
System.out.println("加密后的結(jié)果:"?+?MD5);

//??sha(安全哈希算法)?加密
String?sha256Hex?=?DigestUtils.sha256Hex("123");
System.out.println("sha256加密后:"?+?sha256Hex);

MD5加密后的結(jié)果:ef1fedf5d32ead6b7aaf687de4ed1b71

sha256加密后:a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e3


JAVA bean 對象轉(zhuǎn)換工具

說到這里,我們來說一下對象轉(zhuǎn)化的工具,在開發(fā)中有些規(guī)范,比如DTO、DO、VO等等,之間,如果我們需要轉(zhuǎn)換,單純的我們要一個一個的 set 值,真是一項苦逼的活。

【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!

BeanUtils

java bean對象的相關(guān)轉(zhuǎn)化,我在這里介紹兩個 ,一個 是大家都非常熟悉的 BeanUtils,還有一個就是我平常在開發(fā)中經(jīng)常使用的 MapStructBeanUtils 最常用的莫過于對象的的拷貝了 。 不過面對需要深拷貝的對象大家要注意了,這里并不推薦大家使用此工具去實現(xiàn)

Student?student?=?new?Student();
student.setName("小明");
student.setAge(18);
Student?newStudent?=?new?Student();
BeanUtils.copyProperties(student,newStudent);
System.out.println(newStudent);

Student(name=小明, age=18)


MapStruct

下面我們重點說一下 MapStruct 這個轉(zhuǎn)化,BeanUtils 就是一個大老粗,只能同屬性映射,或者在屬性相同的情況下,允許被映射的對象屬性少。

但當(dāng)遇到被映射的屬性數(shù)據(jù)類型被修改或者被映射的字段名被修改,則會導(dǎo)致映射失敗。而 mapstruct 就是一個巧媳婦兒了。

她心思細(xì)膩,把我們可能會遇到的情況都給考慮到了(要是我也能找一個這樣的媳婦兒該多好,內(nèi)心笑出了豬聲)

1、首先啥都不用想上來我們先把該導(dǎo)的包導(dǎo)進(jìn)去

<dependency>
	<groupid>org.mapstruct</groupid>
	<!-- jdk8以下就使用mapstruct -->
	<artifactid>mapstruct-jdk8</artifactid>
	<version>1.2.0.Final</version>
</dependency>
<dependency>
	<groupid>org.mapstruct</groupid>
	<artifactid>mapstruct-processor</artifactid>
	<version>1.2.0.Final</version>
</dependency>

2、用一下

  • 對象之間字段完全相同

第一步:定義好我們的基礎(chǔ)類

@Data
@AllArgsConstructor
@NoArgsConstructor
public?class?Student{
	private?String?name;
	private?Integer?age?;
}

@Data
@AllArgsConstructor
@NoArgsConstructor
public?class?Teacher{
	private?String?name;
	private?Integer?age?;
}

第二步:接下來定義一個接口,但是注意不需要實現(xiàn),他就呢能夠幫我們轉(zhuǎn)化很神奇的

@Mapper
public?interface?UserCovertToTeacher?{
????UserCovertToTeacher?INSTANCE?=?Mappers.getMapper(UserCovertToTeacher.class);
????Teacher?toCovert(Student?student);
}

最后一步:在代碼中調(diào)用,聰明的小伙伴看下面代碼,一下就明白了,就是這么簡單

Student?student?=?new?Student();
student.setName("小明");
student.setAge(18);
Teacher?teacher?=?UserCovertToTeacher.INSTANCE.toCovert(student);
System.out.println(teacher);

Teacher(name=小明, age=18)

  • 對象之間字段存在不相同情況

我們介紹了完全兩個類字段相同的情況,那么,更加令我們頭疼的 有多個字段名字不同但是有對應(yīng)關(guān)系應(yīng)該怎么搞呢?

我們進(jìn)階介紹一下,如何處理這種參數(shù)名不同的對應(yīng)關(guān)系 目前假設(shè)我們新定義一個微信類,我們的學(xué)生要注冊到微信上,我們就要將學(xué)生對象轉(zhuǎn)化為微信對象

@Data
@AllArgsConstructor
@NoArgsConstructor
static?class?WeiXin{
	private?String?username;
	private?Integer?age?;
}

但是我們發(fā)現(xiàn)和我們上面的學(xué)生類,的名字參數(shù)名不同,怎么對應(yīng)過去的? 答案就是在對方法上配置

@Mapper?
public?interface?UserCovertToWeinxin?{
????UserCovertToWeinxin?INSTANCE?=?Mappers.getMapper(UserCovertToWeinxin.class);
	//?配置字段映射規(guī)則
????@Mapping(source?=?"name",target?=?"username")
????BeanUtilTest.WeiXin?toCovert(BeanUtilTest.Student?student);
}
Student?student?=?new?Student();
student.setName("小明");
student.setAge(18);
WeiXin?weiXin?=?UserCovertToWeinxin.INSTANCE.toCovert(student);
System.out.println(weiXin);

WeiXin(username=小明, age=18)

這么簡單的兩個小例子可包含不了 MapStruct這么強(qiáng)大的功能,不管是日期格式化、還是表達(dá)式解析、還是深拷貝,都能一一搞定,只是限于本篇文章,無法跟大家說了。想想都很傷心呢! 但是還是那句話,拋磚引玉么!剩下的就交給聰明的小伙伴們了!


緩存和限流器工具

最后一小節(jié),我給大家?guī)砦业恼洳?,壓箱底的東西要拿出來了,大家還不快快點贊收藏,記好,錯過了,可就沒有下家店了。

我也是在 guava 中發(fā)現(xiàn)了很多好用的工具的 首先介紹緩存工具,開發(fā)中,我們常用的內(nèi)存緩存,也就常常是定義一個 Map 去存放,但是單純的 Map 只能存和取,確無法做到,緩存過期、緩存淘汰,和相關(guān)通知等等復(fù)雜操作。

我們有必要學(xué)習(xí)掌握一種工具,能夠 Cover 上面所有情況的緩存工具,有需求就有工具類,永遠(yuǎn)記住。?。?!,Cache 登場了,還是老規(guī)矩,先看看它怎么用吧。

Cache

定義一個簡單定時過期的緩存

Cache<string>?cache?=?CacheBuilder.newBuilder()
????????????????.expireAfterWrite(10,?TimeUnit.SECONDS)
????????????????.build();
//?放入緩存
cache.put("小明","活著");
Thread.sleep(10000);
//?從緩存拿取值
System.out.println(cache.getIfPresent("小明"));</string>

null

看到?jīng)],結(jié)果顯而易見,超過了緩存時間,就會自己釋放。嘿嘿。

定義一個緩存符合以下限制:

  • 限制訪問并發(fā)
  • 設(shè)置初始化容量
  • 限制緩存數(shù)量上限
Cache<string>?cache?=?CacheBuilder.newBuilder()、
		????//?最大容量,超過按照?LRU?淘汰
????????????????.maximumSize(100)
		????//?初始容量
????????????????.initialCapacity(10)
		????//?并發(fā)等級?10
????????????????.concurrencyLevel(10)
????????????????.expireAfterWrite(10,?TimeUnit.SECONDS)
????????????????.build();</string>

兩個小例子,大家看明白了沒有,真正的干貨,還不趕緊用起來。

除了這個,一個限流器也是常常需要的,我們總不能自記去寫一個限流器吧,需要考慮的太多,性能還不行哎!那就用接下來介紹的這個工具

RateLimiter

限流器大家在并發(fā)場景下經(jīng)常會遇到,最簡單的實現(xiàn)限流就是令牌桶算法,原理很簡單,但是具體實現(xiàn)是很復(fù)雜的,RateLimiter 幫助我們解決這一點,只需要調(diào)用簡單的 API 就能實現(xiàn)并發(fā)限流

定義限流器,每1秒鐘通過 1 個請求

RateLimiter?rateLimiter?=?RateLimiter.create(1,1,TimeUnit.SECONDS);

并發(fā)兩個去獲取,看一下結(jié)果吧,是不是符合我們的預(yù)期

new?Thread(()->{
	System.out.println("線程?1?獲取到執(zhí)行權(quán)限了嗎?"?+?rateLimiter.tryAcquire());
}).start();

new?Thread(()->{
	System.out.println("線程?2?獲取到執(zhí)行權(quán)限了嗎?"?+?rateLimiter.tryAcquire());
}).start();

線程 1 獲取到執(zhí)行權(quán)限了嗎?true

線程 2 獲取到執(zhí)行權(quán)限了嗎?false

怎么樣,是不是只能有一個通過,簡單例子說明問題。 具體用法還得大家在實際開發(fā)中具體體會,筆者在這里就不多BB了!!留著時間大家趕快去練習(xí)吧。爭取成為一個 API 調(diào)用高手。

修煉完成

經(jīng)過上面這么多的講解、案例和對知識的思考,相信大家已經(jīng)初步掌握了線程池的使用方法和細(xì)節(jié),以及對原理運行流程的掌握, 如果你覺得本文對你有一定的啟發(fā),引起了你的思考。 點贊、轉(zhuǎn)發(fā)、收藏,下次你就能很快的找到我嘍!

(學(xué)習(xí)視頻分享:編程基礎(chǔ)視頻

以上是【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人!的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
有哪些go語言開發(fā)工具 有哪些go語言開發(fā)工具 Dec 11, 2023 pm 03:56 PM

go語言開發(fā)工具:1、GoLand;2、Visual Studio Code;3、Sublime Text;4、Vim;5、LiteIDE;6、GoClipse;7、Delve;8、GoDoc;9、GoCodify;10、GoSublime;11、 Go Playground;12、GoDocBrowser;13、Go-Ethereum;14、LiteIDE X。

軟體開發(fā)工具有哪些 軟體開發(fā)工具有哪些 Oct 20, 2023 am 11:20 AM

軟體開發(fā)工具有編碼和程式設(shè)計工具、版本控制工具、整合開發(fā)環(huán)境、建模和設(shè)計工具、測試和調(diào)試工具、專案管理工具、部署和維運工具等。詳細(xì)介紹:1、編碼和程式設(shè)計工具,用於編寫、編輯和調(diào)試程式碼。例如Visual Studio、Eclipse、IntelliJ IDEA、PyCharm等;2、版本控制工具,用於追蹤和管理程式碼的版本。例如Git、SVN、Mercurial等;3、整合開發(fā)環(huán)境等等。

選擇最適合你的Java開發(fā)工具:評測與推薦 選擇最適合你的Java開發(fā)工具:評測與推薦 Feb 18, 2024 pm 10:18 PM

Java開發(fā)工具評測:哪個才是最適合你的選擇?作為當(dāng)今最受歡迎的程式語言之一,Java在軟體開發(fā)領(lǐng)域中發(fā)揮著重要的作用。而在Java開發(fā)過程中,選擇一個適合自己的開發(fā)工具是至關(guān)重要的。本文將對幾種常見的Java開發(fā)工具進(jìn)行評測,並給予適用場景的建議。 EclipseEclipse是一款開源、跨平臺的Java整合開發(fā)環(huán)境(IDE),被廣泛用於Java專案的開發(fā)。它提

2023年最好用的10個php開發(fā)工具推薦 2023年最好用的10個php開發(fā)工具推薦 May 12, 2017 pm 05:33 PM

對於PHP開發(fā)者,在網(wǎng)路上有很多可用的開發(fā)工具,但是找到合適的PHP開發(fā)工具是很難的,需要花費很多努力和時間。所以,今天php中文網(wǎng)就為大家推薦幾個2023年最好用的php開發(fā)工具

java開發(fā)工具哪個好用 java開發(fā)工具哪個好用 Dec 22, 2023 pm 04:16 PM

好用的java開發(fā)工具有:1、Eclipse IDE;2、IntelliJ IDEA;3、NetBeans;4、Visual Studio Code;5、JDeveloper;6、BlueJ;7、Spring Tool Suite (STS);8、DrJava等。詳細(xì)介紹:1、Eclipse是一個開源的、強(qiáng)大的整合開發(fā)環(huán)境,支援多種程式語言,包括Java等等。

微軟將ChatGPT相關(guān)AI技術(shù)整合到更多開發(fā)工具中 微軟將ChatGPT相關(guān)AI技術(shù)整合到更多開發(fā)工具中 Apr 12, 2023 pm 09:43 PM

3月7日消息,美國當(dāng)?shù)貢r間週一,微軟宣布將爆火聊天機(jī)器人ChatGPT背後的AI技術(shù)整合到Power Platform等更多開發(fā)工具中,該平臺允許用戶在很少甚至不需要編碼的情況下建立應(yīng)用程序,這是微軟將AI技術(shù)與其產(chǎn)品進(jìn)行的最新整合行動。微軟表示,Power Platform內(nèi)的一系列商業(yè)智慧和應(yīng)用開發(fā)工具都增添了新功能,例如Power Virtual Agent和AI Builder。其中,Power Virtual Agent是一款供企業(yè)建立聊天機(jī)器人的工具,現(xiàn)在可以連接到公司內(nèi)部資源,

【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人! 【整理分享】8種開發(fā)工具,提升工作效率,再也不做加班人! Sep 15, 2022 am 11:10 AM

你還在因為加班熬夜而禿頭嗎?你還在因為奇葩需求而造輪子嗎?那你找對人了! !本文切身感受程式設(shè)計師之痛苦,背後默默吐血整理了一篇文章,希望對大家有幫助。衝沖衝! !

PHP 8.3更新:提供更多開發(fā)工具與函數(shù)函式庫 PHP 8.3更新:提供更多開發(fā)工具與函數(shù)函式庫 Nov 27, 2023 pm 12:09 PM

PHP是一種廣泛使用的程式語言,在Web開發(fā)領(lǐng)域中具有重要地位。 PHP的優(yōu)點在於它的靈活性和易用性,使得開發(fā)人員能夠快速建立功能強(qiáng)大的網(wǎng)路應(yīng)用程式。每年,PHP都會進(jìn)行更新和改進(jìn),以滿足不斷變化的需求。最近,PHP8.3更新發(fā)布了,為開發(fā)人員提供了更多的開發(fā)工具和函數(shù)庫。在本文中,我們將探討PHP8.3的一些重要更新。首先,PHP8.3引進(jìn)了更多的開發(fā)

See all articles