工具类用得好,下班下的早
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 從當前時間開始獲取一周日期 RANGE_WEEK_CENTER 以當前日期為中心獲取一周日期 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 元素不能加進去 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 進行操作的。比如對 Bean 進行復(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ù)的時候肯定會使用緩存,當不想用第三方作為緩存的時候,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ù)
當需要訪問 key1 時,如果 key1 此時沒有被緩存,就會從回調(diào)函數(shù)中加載 key1 的值。值得一提的是當多個線程同時訪問的時候只有一個線程會執(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 再过五分钟,你就懂Oracle的数据库对
- 下一篇: 面试官:String的最大长度是多少?