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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

工具类用得好,下班下的早

發(fā)布時間:2024/4/11 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 工具类用得好,下班下的早 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Apache Commons

Apache Commons 是一個功能非常強大、經(jīng)常被使用到的庫。它有 40 個左右的類庫,包含了對字符串、日期、數(shù)組等的操作。

Lang3

Lang3 是一個處理 Java 中基本對象的包,比如用 StringUtils 類操作字符串、ArrayUtils 類操作數(shù)組、DateUtils 類可以處理日期、MutablePair 類可以返回多個字段等等。

字符串操作

對字符串快速操作,在 if else 中少寫判空條件。

StringUtils.isBlank(" "); //是不是空字符串StringUtils.isAnyBlank("a", "", "c"); // 其中一個是不是空字符串StringUtils.isNumeric("1"); //字符串是不是全是數(shù)字組成,"." 不算數(shù)字StringUtils.remove("sgsgsdfasd", "a") //移除字符串

日期操作

終于可以不用 SimpleDateFormat 格式化日期了,DateUtils.iterator 可以獲取一段時間。

Date date = DateUtils.parseDate("2021-07-01", "yyyy-MM-dd");DateUtils.addDays(date,1);//加一天DateUtils.isSameDay(date, new Date());//比較/* 獲取一段日期 RANGE_WEEK_SUNDAY 從周日開始獲取一周日期 RANGE_WEEK_MONDAY 從周一開始獲取一周日期 RANGE_WEEK_RELATIVE 從當(dāng)前時間開始獲取一周日期 RANGE_WEEK_CENTER 以當(dāng)前日期為中心獲取一周日期 RANGE_MONTH_SUNDAY 從周日開始獲取一個月日期 RANGE_MONTH_MONDAY 從周一開始獲取一個月日期 */ Iterator<Calendar> iterator = DateUtils.iterator(date, DateUtils.RANGE_WEEK_CENTER); while (iterator.hasNext()) {Calendar next = iterator.next();System.out.println(DateFormatUtils.format(next, "yyyy-MM-dd")); }

返回多個字段

有時候在一個方法中需要返回多個值的時候,經(jīng)常會使用 HashMap 返回或者是 JSON 返回。Lang3 下已經(jīng)幫我們提供了這樣的工具類,不需要再多寫 HashMap 和 JSON 了。

MutablePair<Integer, String> mutablePair = MutablePair.of(2, "這是兩個值"); System.out.println(mutablePair.getLeft() + " " + mutablePair.getRight());MutableTriple<Integer, String, Date> mutableTriple = MutableTriple.of(2, "這是三個值", new Date()); System.out.println(mutableTriple.getLeft() + " " + mutableTriple.getMiddle() + " " + mutableTriple.getRight());

ArrayUtils 數(shù)組操作

ArrayUtils 是專門處理數(shù)組的類,可以讓方便的處理數(shù)組而不是需要各種循環(huán)操作。

//合并數(shù)組 String[] array1 = new String[]{"value1", "value2"}; String[] array2 = new String[]{"value3", "value4"}; String[] array3 = ArrayUtils.addAll(array1, array2);//clone 數(shù)組 String[] array4 = ArrayUtils.clone(array3);//數(shù)組是否相同 EqualsBuilder.reflectionEquals(array3, array4);//toString ArrayUtils.toString(array4)//反轉(zhuǎn)數(shù)組 ArrayUtils.reverse(array4);//二維數(shù)組轉(zhuǎn) map Map<String, String> arrayMap = (HashMap)ArrayUtils.toMap(new String[][]{{"key1", "value1"}, {"key2", "value2"} }); for(String s : arrayMap.keySet()) {System.out.println(arrayMap.get(s)); }

collections4 集合操作

commons-collections4 增強了 Java 集合框架,提供了一系列簡單的 API 方便操作集合。

maven 依賴

<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.4</version> </dependency>

CollectionUtils 工具類

這是一個工具類,可以檢查 null 元素不被加入集合,合并列表,過濾列表,兩個列表的并集、差集、合集。有部分功能在 Java 8 中可以被 Stream API 替換。

//null 元素不能加進(jìn)去 List<String> arrayList1 = new ArrayList<String>(); arrayList1.add("a"); CollectionUtils.addIgnoreNull(arrayList1, null); System.out.println(arrayList1.size());//排好序的集合,合并后還是排序的 List<String> arrayList2 = new ArrayList<String>(){{add("a");add("c");add("x"); }};List<String> arrayList3 = new ArrayList<String>(){{add("b");add("d");add("f"); }};List<String> arrayList4 = CollectionUtils.collate(arrayList2, arrayList3); System.out.println(arrayList4);// 過濾,只保留 b CollectionUtils.filter(arrayList4, new Predicate<String>() {public boolean evaluate(String s) {if( s.equals("b")) {return true;}return false;} });//交集 CollectionUtils.retainAll(arrayList4, arrayList3);//并集 CollectionUtils.union(arrayList4, arrayList3//差集 CollectionUtils.subtract(arrayList4, arrayList3)

Bag 統(tǒng)計次數(shù)

用于統(tǒng)計值在集合中出現(xiàn)的次數(shù)。

Bag bag = new HashBag<String>(); bag.add("a"); bag.add("b"); bag.add("a"); bag.add("c", 3); System.out.println(bag.getCount("a"));

beanutils Bean 操作

beanutils 是通過反射機制對 JavaBean 進(jìn)行操作的。比如對 Bean 進(jìn)行復(fù)制、map 轉(zhuǎn)對象、對象轉(zhuǎn) Map。

maven 依賴

<dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.4</version> </dependency> //Bean public class User {private String name;//省略get/set }//copy Bean User user1 = new User(); user1.setName("李四"); User user2 = (User) BeanUtils.cloneBean(user1); System.out.println(user2.getName());//Bean 轉(zhuǎn) map BeanUtils.describe(user1);//Map 轉(zhuǎn) Bean Map<String, String> beanMap = new HashMap(); beanMap.put("name", "張三"); User user3 = new User(); BeanUtils.populate(user3, beanMap); System.out.println(user3.getName());

Guava

Google 開源的一個基于 Java 擴展項目,包含了一些基本工具、集合擴展、緩存、并發(fā)工具包、字符串處理等。

maven 依賴

<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1.1-jre</version> </dependency>

Map<String, List> 類型

在java 代碼中經(jīng)常會遇到需要寫 Map<String, List> map 的局部變量的時候。有時候業(yè)務(wù)情況還會更復(fù)雜一點。

//以前 Map<String, List<String>> map = new HashMap<String,List<String>>(); List<String> list = new ArrayList<String>(); list.add("張三"); list.add("李四"); map.put("名稱", list); System.out.println(map.get("名稱"));//現(xiàn)在 Multimap<String, String> multimap = ArrayListMultimap.create(); multimap.put("名稱", "張三"); multimap.put("名稱", "李四"); System.out.println(multimap.get("名稱"));

value 不能重復(fù)的 Map

在 Map 中 value 的值是可以重復(fù)的,Guava 可以創(chuàng)建一個 value 不可重復(fù)的 Map,并且 Map 和 value 可以對調(diào)。

//會報異常 BiMap<String ,String> biMap = HashBiMap.create(); biMap.put("key1", "value"); biMap.put("key2", "value"); System.out.println(biMap.get("key1"));//key-value 對調(diào) biMap = biMap.inverse(); System.out.println(biMap.get("value"));

緩存

寫業(yè)務(wù)的時候肯定會使用緩存,當(dāng)不想用第三方作為緩存的時候,Map 又不夠強大,就可以使用 Guava 的緩存。

使用 CacheBuilder.newBuilder().build() 構(gòu)建緩存,maximumSize() 方法可以設(shè)置緩存的存儲數(shù)量

Cache<String, String> cache = CacheBuilder.newBuilder().maximumSize(2).build(); cache.put("key1", "value1"); cache.put("key2", "value2"); cache.put("key3", "value3"); System.out.println(cache.getIfPresent("key1")); //key1 = null

過期時間

expireAfterAccess() 可以設(shè)置緩存的過期時間。

Cache<String, String> cache = CacheBuilder.newBuilder().maximumSize(2).expireAfterAccess(1, TimeUnit.SECONDS).build(); cache.put("key1", "value1"); Thread.sleep(1000); System.out.println(cache.getIfPresent("key1"));

加載數(shù)據(jù)

當(dāng)需要訪問 key1 時,如果 key1 此時沒有被緩存,就會從回調(diào)函數(shù)中加載 key1 的值。值得一提的是當(dāng)多個線程同時訪問的時候只有一個線程會執(zhí)行回調(diào)函數(shù)。

cache.get("key1", new Callable<String>() {public String call() throws Exception {return "value1";} }); System.out.println(cache.getIfPresent("key1"));

Guava 有許許多多的工具類,這里只列出了小小的部分,可以在官網(wǎng)例子中查看到各種用法。

總結(jié)

通過 Apache Commons 和 Guava 兩個第三方的開源工具庫,可以讓減少循環(huán)、ifelse 的代碼。寫出的代碼更有健壯性并且可以在新人面前裝一波。

總結(jié)

以上是生活随笔為你收集整理的工具类用得好,下班下的早的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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