一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

別在重復(fù)造輪子了,這幾個(gè)開(kāi)源工具庫(kù)送你了

 印度阿三17 2020-08-27

來(lái)自專(zhuān)輯
工具推薦
別在重復(fù)造輪子了,這幾個(gè)開(kāi)源工具庫(kù)送你了
古時(shí)的風(fēng)箏第 74 篇原創(chuàng)文章

風(fēng)箏我作為一個(gè)野路子開(kāi)發(fā)者,直到遇見(jiàn)下面的這幾個(gè)工具庫(kù),才知道之前重復(fù)造了不少輪子,而且輪子還不一定有人家的圓。相信跟我一樣,沒(méi)事兒造輪子的人還不在少數(shù),有些人就是對(duì)造輪子感興趣,這個(gè)咱也無(wú)話可說(shuō),但是,比如我,我是造輪子之前不知道這世上已經(jīng)有好用的輪子了,害,無(wú)知限制了我的想象力。
比如我們?cè)谀玫揭粋€(gè) List 集合之后,要對(duì)這個(gè)集合進(jìn)行判空操作,以前我一直是這樣寫(xiě)的:

List<String> list = getList();
if (list != null && list.size() > 0) {
    //do something
}

雖然這樣也沒(méi)什么問(wèn)題,但是,我懶啊,每次敲這么多代碼,也挺累啊。有同學(xué)說(shuō),那你包裝成一個(gè)方法不就行了,每次調(diào)用個(gè)方法就 OK 啦。這不,同學(xué),你就在造輪子了,已經(jīng)有人幫你寫(xiě)好了這樣類(lèi)似的一系列方法了。
來(lái)讓我們認(rèn)識(shí)認(rèn)識(shí)這些輪子吧。

Java 8 Stream

Stream 不算是工具庫(kù),但是通過(guò) stream 提供的一系列方法,可以實(shí)現(xiàn)集合的過(guò)濾、分組、集合轉(zhuǎn)換等諸多操作。
例如下面的方法,實(shí)現(xiàn)列表元素根據(jù)某個(gè)字段去重的功能。

List<User> userList = new ArrayList();
//添加元素
userList =  userList.stream().filter(distinctByKey(user->user.getUserId())).collect(Collectors.toList());

private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
      Map<Object,Boolean> seen = new ConcurrentHashMap<>();
      return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}

apache commons

官方地址:http://commons./
這不是一個(gè)庫(kù),而是一系列的工具庫(kù)。
由于包含的庫(kù)過(guò)多,我就不一一列舉了,可以到官網(wǎng)一探。有集合處理的、數(shù)學(xué)計(jì)算的、IO 操作的等等,其中最常用的莫過(guò)于 Apache Commons Lang 和 Apache Commons Collections 這兩個(gè)。
Apache Commons Lang 包括一系列工具類(lèi),有字符串相關(guān)的、時(shí)間處理的、反射的、并發(fā)包的等等,Apache Commons Collections 專(zhuān)門(mén)用作集合處理。
下面舉幾個(gè)例子說(shuō)明一下,更詳細(xì)的內(nèi)容可以到官網(wǎng)查看文檔。

字符串判空操作

String s = "";
Boolean isEmpty = StringUtils.isEmpty(s);

獲取類(lèi)的全名稱(chēng)

ClassUtils.getName(ClassUtils.class);

判斷集合是否為空

Boolean isNotEmpty = CollectionUtils.isNotEmpty(list);

反射獲取某個(gè)類(lèi)的所有 Field

Field[] fields = FieldUtils.getAllFields(User.class);

Google Guava

官方地址:https://github.com/google/guava
和 Apache Commons 有點(diǎn)兒類(lèi)似,它也是包含了一系列的比如字符串、集合、反射、數(shù)學(xué)計(jì)算等的操作封裝,還可以用作 JVM 緩存。
舉幾個(gè)例子說(shuō)明:
New 各種對(duì)象

List<String> list = Lists.newArrayList();
Set<String> set = Sets.newHashSet();
Map<String,Object> map = Maps.newConcurrentMap();

// 不可變集合
ImmutableList<String> immutableList = ImmutableList.of("1", "2", "3");

列表轉(zhuǎn)符號(hào)分隔的字符串


List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
String result = Joiner.on("-").join(list);

> 1-2-3

求交集、并集、差集等
例如下面代碼求 set1 和 set2 的交集

Set<Integer> set1 = Sets.newHashSet(1, 2, 3, 4, 5, 6);
Set<Integer> set2 = Sets.newHashSet(1,2,3,4);

Sets.SetView<Integer> intersection = Sets.intersection(set1, set2);

Joda Time

官方地址:https://www./joda-time/
一個(gè)日期、時(shí)間處理的工具庫(kù)。如果你不是經(jīng)常做日期處理,那差不多每次需要的時(shí)候都需要查詢(xún)相關(guān)的 API,而有了工具類(lèi)就不一樣了,只要一個(gè) “.”,你想要的方法就出現(xiàn)了,而 Joda Time 就是一款好用的工具庫(kù)。
比如下面這個(gè)方法,計(jì)算到新年還有多少天。

public Days daysToNewYear(LocalDate fromDate) {
  LocalDate newYear = fromDate.plusYears(1).withDayOfYear(1);
  return Days.daysBetween(fromDate, newYear);
}

OkHttp3

官方地址:https://square./okhttp/
一個(gè) HTTP 客戶(hù)端,使用簡(jiǎn)單,性能良好,是時(shí)候放棄 HttpClient 了。
一個(gè) get 請(qǐng)求:


OkHttpClient client = new OkHttpClient();

String run(String url) throws IOException {
  Request request = new Request.Builder()
      .url(url)
      .build();

  try (Response response = client.newCall(request).execute()) {
    return response.body().string();
  }
}

一個(gè) post 請(qǐng)求:

public static final MediaType JSON
    = MediaType.get("application/json; charset=utf-8");

OkHttpClient client = new OkHttpClient();

String post(String url, String json) throws IOException {
  RequestBody body = RequestBody.create(json, JSON);
  Request request = new Request.Builder()
      .url(url)
      .post(body)
      .build();
  try (Response response = client.newCall(request).execute()) {
    return response.body().string();
  }
}

Json 系列

Jackson

Spring 默認(rèn)的 Json 序列化工具,其實(shí)已經(jīng)足夠用了。
Gson
Google 出品,功能齊全。
FastJson
阿里出品,算法良好,性能最優(yōu)。

EasyExcel

官方地址:https://www./easyexcel/doc/easyexcel
阿里開(kāi)源的 Excel 操作工具庫(kù),可以看做是 Apache POI 的增強(qiáng)封裝版、優(yōu)化版。
如果你的數(shù)據(jù)量很大,那用 EasyExcel 可以節(jié)省內(nèi)存,提升效率,并且沒(méi)有并發(fā)風(fēng)險(xiǎn)。
如果你的 Excel 足夠復(fù)雜,那用 EasyExcel 會(huì)比你直接用 POI 少些很多代碼。
比如我實(shí)現(xiàn)了下面這個(gè) Excel 動(dòng)態(tài)導(dǎo)出,包括動(dòng)態(tài)表頭、動(dòng)態(tài)合并單元格的功能,只用了很少的代碼,如果是使用 POI 的話,那可能代碼量增加不止一倍啊。
別在重復(fù)造輪子了,這幾個(gè)開(kāi)源工具庫(kù)送你了

excel
TinyPinyin

官方地址:https://github.com/promeG/TinyPinyin
中文轉(zhuǎn)拼音,把你輸入的中文轉(zhuǎn)換成拼音。比如搜索功能要實(shí)現(xiàn)這樣的功能,輸入 “fengzheng” 搜索,會(huì)匹配到 “風(fēng)箏”這個(gè)詞語(yǔ),這就需要中文轉(zhuǎn)拼音了。

有的同學(xué)說(shuō)了,這不是拼音轉(zhuǎn)英文嗎?當(dāng)然不是在輸入“fengzheng”的時(shí)候轉(zhuǎn)換了,而是在包含“風(fēng)箏”的這條記錄中有一個(gè)拼音的額外字段,這樣搜索的時(shí)候直接匹配拼音那個(gè)字段。
chinese_name pinyin_name
風(fēng)箏 fengzheng

反射工具庫(kù) - jOOR

官方地址:https://github.com/jOOQ/jOOR

它是 JDK 反射包的友好封裝,通過(guò)一系列簡(jiǎn)單友好的鏈?zhǔn)讲僮鲗?shí)現(xiàn)反射調(diào)用。比如下面這個(gè)例子


public interface StringProxy {
  String substring(int beginIndex);
}

String substring = on("java.lang.String")
                    .create("Hello World")
                    .as(StringProxy.class)
                    .substring(6);    

簡(jiǎn)單的代碼實(shí)現(xiàn) JDK 動(dòng)態(tài)代理,節(jié)省了不少代碼。

Spring AOP 和 動(dòng)態(tài)代理技術(shù)

MyBatis-Plus

官方地址:https://mp./

只要你的項(xiàng)目中有數(shù)據(jù)庫(kù)訪問(wèn),那你肯定用過(guò)或者至少聽(tīng)說(shuō)過(guò) MyBatis ,但是如果你只用 MyBatis 需要針對(duì)每個(gè)DAO方法寫(xiě)對(duì)應(yīng)的 SQL Statement(也就是 mapper.xml 中的代碼塊),當(dāng)然有一些自動(dòng)生成的工具,MyBatis 就有它提供的 MyBatis Generator,比如我也稍做加工,做過(guò)一個(gè) web 版的 MyBatis Generator,開(kāi)發(fā)效率是提高了,但是每個(gè) mapper.xml 文件的代碼量很大,于是 MyBatis-Plus 就要出場(chǎng)了。

官網(wǎng)上對(duì)他的定義如下:

  1. 只做增強(qiáng)不做改變,引入它不會(huì)對(duì)現(xiàn)有工程產(chǎn)生影響,如絲般順滑。

  2. 只需簡(jiǎn)單配置,即可快速進(jìn)行 CRUD 操作,從而節(jié)省大量時(shí)間。

  3. 熱加載、代碼生成、分頁(yè)、性能分析等功能一應(yīng)俱全。

最后,在配上 MybatisX IDEA 插件,也是可以了。

vjtools

官方地址:https://github.com/vipshop/vjtools
這是唯品會(huì)的開(kāi)源工具包,這里主要介紹其中的 vjkit 模塊,是關(guān)于文本,集合,并發(fā)等基礎(chǔ)功能的核心類(lèi)庫(kù)。這個(gè)庫(kù)是我很早之前搜索日期操作的時(shí)候偶然發(fā)現(xiàn)的,我發(fā)現(xiàn)里面日期處理的 API 相當(dāng)全面而且很實(shí)用,還在我的項(xiàng)目中用過(guò)一段時(shí)間。

最后

好用的工具庫(kù)可以提高我們的開(kāi)發(fā)效率,而且也是我們學(xué)習(xí)源碼的好去處,和其他的開(kāi)源框架(比如 Spring、Dubbo)一樣,看看優(yōu)秀的代碼是如何實(shí)現(xiàn)的。

如果你還知道什么好用、強(qiáng)大的開(kāi)源工具包,歡迎在留言區(qū)分享,好東西不能獨(dú)享,讓更多的人受益。

公眾號(hào):古時(shí)的風(fēng)箏

一個(gè)兼具深度與廣度的程序員鼓勵(lì)師,一個(gè)本打算寫(xiě)詩(shī)卻寫(xiě)起了代碼的田園碼農(nóng)!你可選擇現(xiàn)在就關(guān)注我,或者看看歷史文章再關(guān)注也不遲。

技術(shù)交流還可以加群或者直接加我微信。

來(lái)源:https://www./content-4-731251.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    国产91人妻精品一区二区三区| 亚洲黄片在线免费小视频| 日本淫片一区二区三区| 成人你懂的在线免费视频| 国产日产欧美精品视频| 大香蕉再在线大香蕉再在线| 人妻一区二区三区在线| 麻豆蜜桃星空传媒在线观看| 亚洲精品国男人在线视频| 人妻一区二区三区多毛女| 久草视频在线视频在线观看| 国产精品一区二区成人在线| 国产欧美日韩精品一区二区| 女人精品内射国产99| 高清不卡一卡二卡区在线| 免费观看一级欧美大片| 亚洲精品中文字幕在线视频| 国产在线小视频你懂的| 国产欧美日韩精品成人专区| 熟女乱一区二区三区丝袜| 欧美不卡一区二区在线视频| 日韩午夜福利高清在线观看| 国产欧美日韩在线一区二区| 国产爆操白丝美女在线观看| 国产麻豆精品福利在线| 欧美一区二区口爆吞精| 国产自拍欧美日韩在线观看| 国产成人亚洲综合色就色| 国产美女精品午夜福利视频| 免费播放一区二区三区四区| 中文字幕亚洲精品乱码加勒比| 在线观看国产午夜福利| 国产欧美日韩不卡在线视频| 东京热加勒比一区二区三区| 欧美国产日本高清在线| 成人免费高清在线一区二区| 久久国产青偷人人妻潘金莲| 国产传媒一区二区三区| 国产精品久久香蕉国产线| 亚洲欧美日本国产有色| 欧美日韩亚洲精品在线观看|