Java必須のツールライブラリで、コード量を90%削減...

10625 ワード

何年も働いてから、多くのツールクラスライブラリが発見され、コード量を大幅に簡素化し、開発効率を高めることができたが、初級開発者は知らなかった.これらのクラスライブラリはとっくに業界標準クラスライブラリとなっており、大手企業の内部でも使用されていますが、仕事を始めたばかりの頃からこれらのツールクラスライブラリを使用していると教えてくれたら、どんなにいいでしょうか.
どんなツールクラスライブラリがあるか見てみましょう.あなたも使ったことがあります.
1.Java独自のツール方法
1.1 Listコレクションをカンマで区切った文字列につづる
//    list               a,b,c  
List 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 2つの文字列が等しいかどうかを比較し、大文字と小文字を無視する
if (strA.equalsIgnoreCase(strB)) {  
  System.out.println("  ");  
}  

1.3 2つのオブジェクトが等しいかどうかを比較する
equalsで2つのオブジェクトが等しいかどうかを比較する場合は、左のオブジェクトを空にする必要があります.そうしないと、ポインタ異常が報告される可能性があります.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 2つのList集合の交差を取る
List list1 = new ArrayList<>();  
list1.add("a");  
list1.add("b");  
list1.add("c");  
List list2 = new ArrayList<>();  
list2.add("a");  
list2.add("b");  
list2.add("d");  
list1.retainAll(list2);  
System.out.println(list1); //   [a, b]  

2.apache commonsツールクラスライブラリ
apache commonsは最も強力で、最も広く使われているツールクラスライブラリでもあり、中のサブライブラリは非常に多く、以下で最もよく使われているものをいくつか紹介します.
2.1 commons-lang,java.langの拡張版
commons-lang 3を使用することをお勧めします.apiを最適化します.元のcommons-langは更新を停止しました.
Maven依存は次のとおりです.
  
    org.apache.commons  
    commons-lang3  
    3.12.0  
  

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包装仮対象
1つのメソッドで2つ以上のフィールドを返す必要がある場合、通常は一時的なオブジェクトとしてカプセル化されます.PairとTripleがあれば必要ありません.
//         
ImmutablePair pair = ImmutablePair.of(1, "yideng");  
System.out.println(pair.getLeft() + "," + pair.getRight()); //    1,yideng  
//         
ImmutableTriple 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コレクションツールクラス
Maven依存は次のとおりです.
  
    org.apache.commons  
    commons-collections4  
    4.4  
  

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 collection = CollectionUtils.retainAll(listA, listB);  
//          
Collection collection = CollectionUtils.union(listA, listB);  
//          
Collection collection = CollectionUtils.subtract(listA, listB);  

2.3 common-beanutils操作対象
Maven依存:
  
    commons-beanutils  
    commons-beanutils  
    1.9.4  
  
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  
Map 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ファイルフロー処理
Maven依存:
  
    commons-io  
    commons-io  
    2.8.0  
  

ファイル処理
File file = new File("demo1.txt");  
//       
List lines = FileUtils.readLines(file, Charset.defaultCharset());  
//       
FileUtils.writeLines(new File("demo2.txt"), lines);  
//       
FileUtils.copyFile(srcFile, destFile);  

3.Google Guavaツールクラスライブラリ
Maven依存:
  
    com.google.guava  
    guava  
    30.1.1-jre  
  

3.1コレクションの作成
List list = Lists.newArrayList();  
List list = Lists.newArrayList(1, 2, 3);  
//   list  
List reverse = Lists.reverse(list);  
System.out.println(reverse); //    [3, 2, 1]  
// list      ,         ,    10     
List> partition = Lists.partition(list, 10);  
  
Map map = Maps.newHashMap();  
Set set = Sets.newHashSet();  

3.2ブラックテクノロジー集合
3.2.1 Multimap一つのキーで複数のvalueのHashMapをマッピングできる
Multimap map = ArrayListMultimap.create();  
map.put("key", 1);  
map.put("key", 2);  
Collection values = map.get("key");  
System.out.println(map); //    {"key":[1,2]}  
//              Map  
Map> collectionMap = map.asMap();  

もっと手間を省いて、もっと簡潔で、あなたが再びMapを作成することを省くことができます
3.2.2 BiMap valueも繰り返すことができないHashMap
BiMap biMap = HashBiMap.create();  
//   value  ,put      ,   forcePut    
biMap.put("key","value");  
System.out.println(biMap); //    {"key":"value"}  
//   value    ,       key/value   ,      
BiMap inverse = biMap.inverse();  
System.out.println(inverse); //    {"value":"key"}  

これは実は双方向マッピングで、いくつかのシーンでは実用的です.
3.2.3 Table二つのキーを持つHashMap
//     ,            
Table table = HashBasedTable.create();  
table.put(18, " ", "yideng");  
table.put(18, " ", "Lily");  
System.out.println(table.get(18, " ")); //    yideng  
//          Map,         
Map row = table.row(18);  
System.out.println(row); //    {" ":"yideng"," ":"Lily"}  
//        
Map column = table.column(" ");  
System.out.println(column); //    {18:"yideng"}  

3.2.4 MultisetカウントのためのSet
Multiset multiset = HashMultiset.create();  
multiset.add("apple");  
multiset.add("apple");  
multiset.add("orange");  
System.out.println(multiset.count("apple")); //    2  
//          
Set set = multiset.elementSet();  
System.out.println(set); //    ["orange","apple"]  
//              
Iterator iterator = multiset.iterator();  
while (iterator.hasNext()) {  
    System.out.println(iterator.next());  
}  
//                  
multiset.setCount("apple", 5);

以上は個人的な経験であり、皆さんに参考にしていただきたいと思います.もし間違いがあったり、完全に考えていないところがあれば、教えてください.
作者:一灯アーキテクチャソース:www.toutiao.com/i 6943239541448917512
最近のホット文書の推奨:
1. 1000+道Java面接問題及び解答整理(2021最新版)
2. やっとオープンソースプロジェクトでIntelliJ IDEAアクティブコードを手に入れました。いい香りですね。
3. アリMockツールは正式にオープンし、市販のすべてのMockツールを乾かします!
4. Spring Cloud 2020.0.0が正式にリリースされ、新しい転覆バージョン!
5. 『Java開発マニュアル(嵩山版)』最新リリース、速速速ダウンロード!
いいと思います.いいね+転送を忘れないでください.