Java程式設計師必會的工具庫,讓你的代碼量減少90%!

2022-01-27 Java面試那些事兒
# Java自帶工具方法1.1 List集合拼接成以逗號分隔的字符串
// 如何把list集合拼接成以逗號分隔的字符串 a,b,c  List<String> list = Arrays.asList("a", "b", "c");  // 第一種方法,可以用stream流  String join = list.stream().collect(Collectors.joining(","));  System.out.println(join); // 輸出 a,b,c  // 第二種方法,其實String也有join方法可以實現這個功能  String join = String.join(",", list);  System.out.println(join); // 輸出 a,b,c  


1.2 比較兩個字符串是否相等,忽略大小寫
if (strA.equalsIgnoreCase(strB)) {    System.out.println("相等");  }  


1.3 比較兩個對象是否相等當我們用equals比較兩個對象是否相等的時候,還需要對左邊的對象進行判空,不然可能會報空指針異常,我們可以用java.util包下Objects封裝好的比較是否相等的方法
Objects.equals(strA, strB);  


源碼是這樣的

public static boolean equals(Object a, Object b) {      return (a == b) || (a != null && a.equals(b));  }  


1.4 兩個List集合取交集
List<String> list1 = new ArrayList<>();  list1.add("a");  list1.add("b");  list1.add("c");  List<String> list2 = new ArrayList<>();  list2.add("a");  list2.add("b");  list2.add("d");  list1.retainAll(list2);  System.out.println(list1); // 輸出[a, b]  


# apache commons工具類庫2.1 commons-lang,java.lang的增強版建議使用commons-lang3,優化了一些api,原來的commons-lang已停止更新
<dependency>      <groupId>org.apache.commons</groupId>      <artifactId>commons-lang3</artifactId>      <version>3.12.0</version>  </dependency>  


2.1.1 字符串判空傳參CharSequence類型是String、StringBuilder、StringBuffer的父類,都可以直接下面方法判空,以下是源碼:
public static boolean isEmpty(final CharSequence cs) {      return cs == null || cs.length() == 0;  }  
public static boolean isNotEmpty(final CharSequence cs) { return !isEmpty(cs); }
// 判空的時候,會去除字符串中的空白字符,比如空格、換行、制表符 public static boolean isBlank(final CharSequence cs) { final int strLen = length(cs); if (strLen == 0) { return true; } for (int i = 0; i < strLen; i++) { if (!Character.isWhitespace(cs.charAt(i))) { return false; } } return true; }
public static boolean isNotBlank(final CharSequence cs) { return !isBlank(cs); }


2.1.2 首字母轉成大寫
String str = "yideng";  String capitalize = StringUtils.capitalize(str);  System.out.println(capitalize); // 輸出Yideng  


2.1.3 重複拼接字符串
String str = StringUtils.repeat("ab", 2);  System.out.println(str); // 輸出abab  


2.1.4 格式化日期再也不用手寫SimpleDateFormat格式化了
// Date類型轉String類型  String date = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");  System.out.println(date); // 輸出 2021-05-01 01:01:01  
// String類型轉Date類型 Date date = DateUtils.parseDate("2021-05-01 01:01:01", "yyyy-MM-dd HH:mm:ss");
// 計算一個小時後的日期 Date date = DateUtils.addHours(new Date(), 1);


2.1.5 包裝臨時對象當一個方法需要返回兩個及以上欄位時,我們一般會封裝成一個臨時對象返回,現在有了Pair和Triple就不需要了
// 返回兩個欄位  ImmutablePair<Integer, String> pair = ImmutablePair.of(1, "yideng");  System.out.println(pair.getLeft() + "," + pair.getRight()); // 輸出 1,yideng  // 返回三個欄位  ImmutableTriple<Integer, String, Date> triple = ImmutableTriple.of(1, "yideng", new Date());  System.out.println(triple.getLeft() + "," + triple.getMiddle() + "," + triple.getRight()); // 輸出 1,yideng,Wed Apr 07 23:30:00 CST 2021  


2.2 commons-collections 集合工具類
<dependency>      <groupId>org.apache.commons</groupId>      <artifactId>commons-collections4</artifactId>      <version>4.4</version>  </dependency>  


2.2.1 集合判空
public static boolean isEmpty(final Collection<?> coll) {      return coll == null || coll.isEmpty();  }  
public static boolean isNotEmpty(final Collection<?> coll) { return !isEmpty(coll); } // 兩個集合取交集 Collection<String> collection = CollectionUtils.retainAll(listA, listB); // 兩個集合取併集 Collection<String> collection = CollectionUtils.union(listA, listB); // 兩個集合取差集 Collection<String> collection = CollectionUtils.subtract(listA, listB);


2.3 common-beanutils 操作對象
<dependency>      <groupId>commons-beanutils</groupId>      <artifactId>commons-beanutils</artifactId>      <version>1.9.4</version>  </dependency>  public class User {      private Integer id;      private String name;  } 

 

User user = new User();  BeanUtils.setProperty(user, "id", 1);  BeanUtils.setProperty(user, "name", "yideng");  System.out.println(BeanUtils.getProperty(user, "name")); // 輸出 yideng  System.out.println(user); // 輸出 {"id":1,"name":"yideng"}  


// 對象轉map  Map<String, String> map = BeanUtils.describe(user);  System.out.println(map); // 輸出 {"id":"1","name":"yideng"}  // map轉對象  User newUser = new User();  BeanUtils.populate(newUser, map);  System.out.println(newUser); // 輸出 {"id":1,"name":"yideng"}  


2.4 commons-io 文件流處理
<dependency>      <groupId>commons-io</groupId>      <artifactId>commons-io</artifactId>      <version>2.8.0</version>  </dependency>  


File file = new File("demo1.txt");  // 讀取文件  List<String> lines = FileUtils.readLines(file, Charset.defaultCharset());  // 寫入文件  FileUtils.writeLines(new File("demo2.txt"), lines);  // 複製文件  FileUtils.copyFile(srcFile, destFile);  


# Google Guava 工具類庫
<dependency>      <groupId>com.google.guava</groupId>      <artifactId>guava</artifactId>      <version>30.1.1-jre</version>  </dependency>  


3.1 創建集合
List<String> list = Lists.newArrayList();  List<Integer> list = Lists.newArrayList(1, 2, 3);  // 反轉list  List<Integer> reverse = Lists.reverse(list);  System.out.println(reverse); // 輸出 [3, 2, 1]  // list集合元素太多,可以分成若干個集合,每個集合10個元素  List<List<Integer>> partition = Lists.partition(list, 10);  
Map<String, String> map = Maps.newHashMap(); Set<String> set = Sets.newHashSet();


3.2 黑科技集合3.2.1 Multimap 一個key可以映射多個value的HashMap
Multimap<String, Integer> map = ArrayListMultimap.create();  map.put("key", 1);  map.put("key", 2);  Collection<Integer> values = map.get("key");  System.out.println(map); // 輸出 {"key":[1,2]}  // 還能返回你以前使用的臃腫的Map  Map<String, Collection<Integer>> collectionMap = map.asMap();  


多省事,多簡潔,省得你再創建 Map<String, List>
3.2.2 BiMap 一種連value也不能重複的HashMap
BiMap<String, String> biMap = HashBiMap.create();  // 如果value重複,put方法會拋異常,除非用forcePut方法  biMap.put("key","value");  System.out.println(biMap); // 輸出 {"key":"value"}  // 既然value不能重複,何不實現個翻轉key/value的方法,已經有了  BiMap<String, String> inverse = biMap.inverse();  System.out.println(inverse); // 輸出 {"value":"key"}  



3.2.3 Table 一種有兩個key的HashMap
// 一批用戶,同時按年齡和性別分組  Table<Integer, String, String> table = HashBasedTable.create();  table.put(18, "男", "yideng");  table.put(18, "女", "Lily");  System.out.println(table.get(18, "男")); // 輸出 yideng  // 這其實是一個二維的Map,可以查看行數據  Map<String, String> row = table.row(18);  System.out.println(row); // 輸出 {"男":"yideng","女":"Lily"}  // 查看列數據  Map<Integer, String> column = table.column("男");  System.out.println(column); // 輸出 {18:"yideng"}  


3.2.4 Multiset 一種用來計數的Set
Multiset<String> multiset = HashMultiset.create();  multiset.add("apple");  multiset.add("apple");  multiset.add("orange");  System.out.println(multiset.count("apple")); // 輸出 2  // 查看去重的元素  Set<String> set = multiset.elementSet();  System.out.println(set); // 輸出 ["orange","apple"]  // 還能查看沒有去重的元素  Iterator<String> iterator = multiset.iterator();  while (iterator.hasNext()) {      System.out.println(iterator.next());  }  // 還能手動設置某個元素出現的次數  multiset.setCount("apple", 5);


相關焦點

  • 乾貨 | Java必背英語單詞不會,別說你是Java程式設計師!
    OO: object-oriented ,面向對象OOP: object-oriented programming,面向對象編程JDK:Java development kit, java開發工具包JVM:java virtual machine ,java虛擬機Compile:編繹Run:運行Class
  • 阿里內部學習指南《Effective Java中文 第3版》程式設計師進階必備
    經典Jolt獲獎作品《Effective Java》的第3版這本書,對上一版內容進行了徹底的更新,介紹了如何充分利用從泛型到枚舉、從註解到自動裝箱的各種特性,幫助讀者更加有效地使用Java程式語言及其基本類庫:java.lang. java.util和java.io,以及子包,如java.util. concurrent和java.util.function等。
  • 優雅地處理你的 Java 異常吧,不然後果很嚴重!
    本文介紹本文僅按照業務系統開發角度描述異常的一些處理看法.不涉及java的異常基礎知識,可以自行查閱 《Java核心技術 卷I》 和 《java編程思想》 可以得到更多的基礎信息.有效性檢查,可以交給java的校驗框架執行,比如JSR303. 假設用戶提交的數據經過驗證都合法,還是有一些情況是不能調用修改邏輯的.一些程式設計師錯誤的開發了代碼,導致保存過程中出現異常,比如NPE.
  • 來自Java程式設計師的Python新手入門小結
    本篇概覽欣宸是個Java程式設計師,最近正在學習Python,本文記錄了學習過程,以及一點自己的思考,主要用途是作為筆記來總結和溫習,另外如果您也是一位初學Python的Java程式設計師,希望本文能給您一些參考;版本作業系統:macOS Big Sur (11.6) Anaconda3:2021.05
  • Java編碼員和程式設計師好助手:十大Android IDE工具和應用
    Android可以說是一個極其強大的平臺(開源),本篇文章為Java編碼員和程式設計師整理了一些有用的應用和IDE,使事情變得容易些。
  • 程式設計師面試必考題(十六)--Java中的數組鍊表
    ArrayList類ArrayList類是Java標準包java.util中的一部分。ArrayList提供了保存一組對象的另一種方法,與數組相比,它有3大好處,如下所示 (1) 程序中ArrayList的大小變化是按需進行的,而數組在創建時設置了固定的長度。
  • 人生第一行經典代碼,決定程式設計師的出身,更決定程式設計師的職業生涯
    ,往往決定了程式設計師的出身,更決定了程式設計師的職業生涯。第一行代碼,決定的是未來程式設計師的入門程式語言。所以,換而言之,程式設計師的入門語言,決定了程式設計師的教育背景,也決定了未來編程路上能走多遠。程式設計師的入門語言越簡單,越容易被軟體行業所淘汰。1、html:路人甲有沒有? 編程旅途中的路人甲。
  • GitHub 上那些值得一試的 Java 開源庫
    我一直使用JAVA來寫後端應用,平時也會關注一些國外技術大牛的博客(來自Tapki、DZone、Google Developer等技術博客),從而注意到了一些新的而且很有意思Java開源庫,它們有些能給你的項目帶來幫助,有些是以遊戲的形式幫你提高Java的編程水平,而另一些則能夠幫助你識別JAVA程序中的常見問題 。
  • Java 中的異常和處理詳解
    錯誤不能被程式設計師通過代碼處理,Error很少出現。因此,程式設計師應該關注Exception為父類的分支下的各種異常類。異常:Exception以及他的子類,代表程序運行時發送的各種不期望發生的事件。可以被Java異常處理機制使用,是異常處理的核心。總體上我們根據Javac對異常的處理要求,將異常類分為2類。
  • java程式設計師常用的11個API,趕緊收藏
    1.Arrays.asList(T… data)注意:該方法返回的是 Arrays 內部靜態類 ArrayList,而不是我們平常使用的 ArrayList,,該靜態類 ArrayList 沒有覆蓋父類的 add, remove 等方法,所以如果直接調用,會報 UnsupportedOperationException 異常List<Integer>
  • Java 數組轉 List 的三種方式及對比
    本文介紹Java中數組轉為List三種情況的優劣對比,以及應用場景的對比,以及程式設計師常犯的類型轉換錯誤原因解析。一.最常見方式(未必最佳)通過 Arrays.asList(strArray) 方式,將數組轉換List後,不能對List增刪,只能查改,否則拋異常。
  • Java基礎面試題簡單總結
    例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發NullPointerException。另一種情況就是JAVA允許程式設計師擴展這種語義檢查,程式設計師可以創建自己的異常,並自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。
  • 3分鐘帶你品嘗新鮮出爐的Java 17,看完就知道香不香!
    既然長期支持,作為Java程式設計師就必須重視並搞起來。那麼讓我們來閱覽一下二十年陳釀 Java17  。文木附送OpenJDK 17 Earily Access 版本下載地址,還不玩起來!1.蘋果不用OpenGL了,那Java為了適應它也要慢慢的減少使用。2.4  JEP 391:   macOS/AArch64 Port總結一句就是,Java 是一個跨平臺的語言,那麼不管什麼樣的系統架構,咱們都必須支持起來,蘋果用戶不少,咱得及時服務好。
  • 怎樣能學好Java?在項目實戰中我漸漸成長
    管理信息系統對我來說在專業上會經常使用,因為現代化的酒店管理離不開信息技術。作為理工科較好的我更希望在如何開發現代化的酒店管理系統方面有所建樹,於是我在學好大學專業課的同時也在往酒店管理信息系統開發方面多加鑽研。因為我是非計算機專業的,所以怎樣學好Java也是我在一開始比較關心的問題。
  • Java 8—Java 10 特性詳解
    編譯器會自動把滿足function interface要求的接口自動識別為function interface,所以你才不需要對上面示例中的 ITest接口增加@FunctionInterface註解。
  • Java生成、解析二維碼(附源碼)
    目標:藉助Google提供的ZXing Core工具包,使用Java語言實現二維碼的生成和解析。步(BitMatrix matrix, String format, OutputStream stream) throws IOException { BufferedImage image = toBufferedImage(matrix); if (!
  • 致敬程式設計師!澳洲程式設計師節專屬福利,抽大疆第二代Osmo Pocket
    抽到即賺到一經公布就在朋友圈引發了不小的熱議不少程式設計師紛紛表示今年的程式設計師節日禮物就是它了!!!擁有了它你就是周圍最讓人羨慕的崽你就是今年的時尚icon!就有藉口找你的女神,拍個防抖視頻啦我對女神說:「我新買的OSMO Pocket 2,約你拍段VLOG啊」女神回答:「好啊」
  • Java程式設計師必讀書,豆瓣評分9.8!等了10年終於更新了
    在全球Java程式設計師漫長的等待下,《Effective Java》(第3版)終於出版了,第二版和第三版中間整整隔了十年!豆瓣評分 9.8Java世界的頂級高手Josh Bloch著作90個條目,討論Java程序設計中的一條規則這個新版本涵蓋了JDK 7、8和9中引入的新特性,Joshua Bloch為了適應新版本,在書中條目的更新上做了大量的工作,除此之外,還添加了一個全新的章節來解釋關於Java 8 的特性總而言之,讓你讀這本書根本不需要任何理由,它實在是太受歡迎了
  • 【答疑解惑】java中static關鍵字的作用
    但是要注意的是,雖然在靜態方法中不能訪問非靜態成員方法和非靜態成員變量,但是在非靜態成員方法中是可以訪問靜態成員方法/變量的。static變量static變量也稱作靜態變量,靜態變量和非靜態變量的區別是:靜態變量被所有的對象所共享,在內存中只有一個副本,它若且唯若在類初次加載時會被初始化。
  • 漫畫|最讓程式設計師抓狂的7件事
    java javascript 程式語言 更多精彩技術漫畫,盡在碼農翻身後記:這篇漫畫總結了讓程式設計師頭疼的一些事情:一、懂點技術,瞎指揮,這種情況在項目開發的時候比較常見,強勢的甲方領導如果懂一點兒技術,很容易讓乙方陷入困境:我也是做過技術的,這個需求很容易實現