zoukankan      html  css  js  c++  java
  • Java最常用的工具类库

    Apache Commons
    Apache Commons有很多子项目,常用的项目如下
    
    项目    作用
    BeanUtils    对Java Bean进行各种操作,复制对象,属性
    Codec    处理常用的编码,解码
    Collections    扩展Java集合框架的操作
    I/O    输入/输出工具的封装
    Lang    java基本对象(java.lang) 方法的工具类包
    BeanUtils
    提供了一系列对java bean的操作,读取和设置属性值等
    
    @Data
    public class User {
        private String username;
        private String password;
    }
    
    User user = new User();
    BeanUtils.setProperty(user, "username", "li");
    BeanUtils.getProperty(user, "username");
    
    map和bean的互相转换
    
    // bean->map
    Map<String, String> map = BeanUtils.describe(user);
    // map->bean
    BeanUtils.populate(user, map);
    
    我们将对象放在缓存中通常用redis中的hash,如下
    
    # 设置用户信息
    hset student name test
    hset student age 10
    
    这种场景下map和bean的互相转换的工具类就特别有用
    
    Codec
    常见的编码,解码方法封装
    
    // Base64
    Base64.encodeBase64String(byte[] binaryData)
    Base64.decodeBase64(String base64String)
    
    // MD5
    DigestUtils.md5Hex(String data)
    
    // URL
    URLCodec.decodeUrl(byte[] bytes);
    URLCodec.encodeUrl(BitSet urlsafe, byte[] bytes);
    
    Collections
    交并差等操作
    
    // 判空
    CollectionUtils.isEmpty(collA);
    // 交集
    CollectionUtils.retainAll(collA, collB);
    // 并集
    CollectionUtils.union(collA, collB);
    // 差集
    CollectionUtils.subtract(collA, collB);
    // 判等
    CollectionUtils.isEqualCollection(collA, collB);
    
    I/O
    IOUtils对IO操作的封装
    
    // 拷贝流
    IOUtils.copy(InputStream input, OutputStream output);
    // 从流中读取内容,转为list
    List<String> line = IOUtils.readLines(InputStream input, Charset encoding);
    
    FileUtils对文件操作类的封装
    
    File file = new File("/show/data.text");
    // 按行读取文件
    List<String> lines = FileUtils.readLines(file, "UTF-8");
    // 将字符串写入文件
    FileUtils.writeStringToFile(file, "test", "UTF-8");
    // 文件复制
    FileUtils.copyFile(srcFile, destFile);
    
    Lang
    StringUtils 以下断言测试通过
    
    // isEmpty的实现 cs == null || cs.length() == 0; return true
    assertEquals(true, StringUtils.isEmpty(""));
    
    assertEquals(true, StringUtils.isBlank(null));
    assertEquals(true, StringUtils.isBlank(""));
    // 空格
    assertEquals(true, StringUtils.isBlank(" "));
    // 回车
    assertEquals(true, StringUtils.isBlank("    "));
    
    Pair和Triple
    当想返回2个或3个值,但这几个值没有相关性,没有必要单独封装一个对象,就可以用到如下数据结构,返回Pair或Triple对象
    
    Pair<Integer, Integer> pair = new ImmutablePair<>(1, 2);
    // 1 2
    System.out.println(pair.getLeft() + " " + pair.getRight());
    Triple<Integer, Integer, Integer> triple = new ImmutableTriple<>(1,2,3);
    // 1 2 3
    System.out.println(triple.getLeft() + " " + triple.getMiddle() + " " + triple.getRight());
    
    Google Guava
    集合的创建
    
    // 普通集合的创建
    List<String> list = Lists.newArrayList();
    Set<String> set = Sets.newHashSet();
    
    // 不可变集合的创建
    ImmutableList<String> list = ImmutableList.of("a", "b", "c");
    ImmutableSet<String> set = ImmutableSet.of("a", "b");
    
    不可变集合是线程安全的,并且中途不可改变,因为add等方法是被声明为过期,并且会抛出异常
    
    public final void add(int index, E element) {
        throw new UnsupportedOperationException();
    }
    
    各种黑科技集合
    
    // use java
    Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
    // use guava
    Multimap<String, Integer> map = ArrayListMultimap.create();
    map.put("key1", 1);
    map.put("key1", 2);
    // [1, 2]
    System.out.println(map.get("key1")); 
    
    2个键映射一个值
    
    Table<String, String, Integer> table = HashBasedTable.create();
    table.put("a", "a", 1);
    table.put("a", "b", 2);
    // 2
    System.out.println(table.get("a", "b"));
    还有很多其他各种类型的集合,不再介绍
    stop watch
    查看某段代码的运行时间
    
    Stopwatch stopwatch = Stopwatch.createStarted();
    // do something
    long second = stopwatch.elapsed(TimeUnit.SECONDS);
    TimeUnit 可以指定时间精度
    
    Joda Time
    jdk1.8之前,日期操作类常用的只有java.util.Date和java.util.Calendar,但是这2个类的易用性实在太差了,SimpleDateFormat不是线程安全的 。这就逼迫用户去选择第三方的日期操作类,Joda Time就是其中的佼佼者。后来Java自身也意识到了这个问题,于是jdk1.8大量借鉴了Joda Time的理念,推出了新的日期api,LocalDate
    ,LocalTime,LocalDateTime等,可以看如下文章了解一下用法、
    
    https://blog.csdn.net/zzti_erlie/article/details/100849192
    
    2者的api很相似,如果公司的jdk版本在1.8以上推荐使用jdk1.8新推出的日期类,如果在1.8以下推荐使用Joda Time
    
    Apache Httpcomponents
    很多http工具类都是用Apache Httpcomponents封装的,内容比较多,单开一篇文章把
    
  • 相关阅读:
    108. Convert Sorted Array to Binary Search Tree
    107. Binary Tree Level Order Traversal II
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    104. Maximum Depth of Binary Tree
    103. Binary Tree Zigzag Level Order Traversal
    102. Binary Tree Level Order Traversal
    系统和进程相关信息
    文件I/0缓冲
    系统编程概念(文件系统mount等函数的使用)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317280.html
Copyright © 2011-2022 走看看