• java常用的工具类/第三方类库


    java常用的工具类/第三方类库

    在开发的过程中,有些代码直接用原生的语法写起来比较麻烦。
    多掌握一些java常用的工具类、java常用的第三方类库,可以让我们提高效率,代码变得简洁优雅。

    一、apache commons-lang

    apache出品,java开发者经常会用到的工具类库。可以处理字符串、IO、集合等。

    依赖:

          <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12</version>
          </dependency>
    

    StringUtils:

    用于处理字符串,常用的方法有

    boolean isEmpty(CharSequence cs):判断字符串是否为空,字符串为null或者字符串长度为0时返回true
    
    boolean isBlank(CharSequence cs):判断字符串是否为空格符(空格、换行符、制表符、tab 等)
    
    boolean isNotEmpty(CharSequence cs):判断字符串是否不为空
    
    boolean isNotBlank(CharSequence cs):判断字符串是否不为空格符
    

    示例:

    String name = "lin";
    if (StringUtils.isNotBlank(name)) {
    
    }
    

    IOUtils:

    用于处理IO流。

    常见方法:

    String toString(InputStream input): 将InputStream 流的内容,转化为字符串。
    
    String toString(InputStream input, String encoding):将InputStream 流的内容,按照指定的编码,转化为字符串。
    
    List<String> readLines(InputStream input):将InputStream 流的内容,逐行转化为集合
    
    List<String> readLines(InputStream input, String encoding):将InputStream 流的内容,按照指定的编码,逐行转化为集合
    
    byte[] toByteArray(InputStream input): 将InputStream 流的内容,转化为字节数组。
    

    FileUtils

    常用方法:

    String readFileToString(File file): 读取文件的内容
    
    List<String> readLines(File file): 逐行读取文件的内容,返回集合。
    
    Collection<File> listFiles(File directory, String[] extensions, boolean recursive) : 指定文件后缀如txt,遍历文件夹中的文件。
    参数extensions是文件后缀,布尔参数recursive表示是否遍历所有的子文件夹。
    
    writeStringToFile(File file, String data) : 清除文件原来的内容,在文件后面追加内容。
    
    writeStringToFile(File file, String data, boolean append):布尔参数append为true时,表示不清除文件原来的内容,在文件后面追加内容。 
    
    writeLines(File file, Collection<?> lines):清除文件原来的内容,在文件后面写入新的内容,逐行地写。
    
    writeLines(File file, Collection<?> lines, boolean append):布尔参数append为true时,表示不清除文件原来的内容,在文件后面逐行追加内容,逐行地写。 
    

    示例:

        public static void testReadFile() throws IOException {
            //读取文件
            String result = FileUtils.readFileToString(new File("E:\\test.txt"));
            System.out.println(result);
        }
    
        private static void testReadLines() throws IOException {
            //逐行读取文件
            List<String> lines = FileUtils.readLines(new File("E:\\test.txt"));
            System.out.println(lines);
        }
    
        public static void testListFile() {
            // 指定文件后缀如txt,遍历文件夹中的文件。注意,此处的test是文件夹名称,没有后缀。
            File directory = new File("E:\\test");
            Collection<File> files = FileUtils.listFiles(directory, new String[]{"txt"}, false);
            System.out.println(files);
    
        }
    
        public static void testWriteString() throws IOException {
            File file = new File("E:\\test.txt");
            //清除文件原来的内容,在文件中写入新的内容。
            FileUtils.writeStringToFile(file,"testWriteString");
            String content = FileUtils.readFileToString(file);
            System.out.println(content);
        }
    
        public static void testWriteStringAppend() throws IOException {
            File file = new File("E:\\test.txt");
            //不清除文件原来的内容,在文件后面追加内容。
            FileUtils.writeStringToFile(file,"testWriteStringAppend", true);
            String content = FileUtils.readFileToString(file);
            System.out.println(content);
        }
    
        public static void testWriteLine() throws IOException {
            File file = new File("E:\\test.txt");
            // 可以一行行写入文本
            List<String> lines = new ArrayList<>();
            lines.add("test");
            lines.add("testWriteLine");
            FileUtils.writeLines(file,lines);
            String content = FileUtils.readFileToString(file);
            System.out.println(content);
        }
    
        public static void testWriteLineAppend() throws IOException {
            File file = new File("E:\\test.txt");
            // 可以一行行写入文本
            List<String> lines = new ArrayList<>();
            lines.add("test");
            lines.add("testWriteLineAppend");
            //不清除文件原来的内容,在文件后面追加内容。
            FileUtils.writeLines(file,lines, true);
            String content = FileUtils.readFileToString(file);
            System.out.println(content);
        }
    
    

    二、commons-collections:

    依赖:

    <dependency>
    	<groupId>commons-collections</groupId>
    	<artifactId>commons-collections</artifactId>
    	<version>3.4</version>
    </dependency>
    

    CollectionUtils

    CollectionUtils类用于处理集合, 常用方法如下:

    boolean isEmpty(Collection coll): 判断集合是否为空
    
    boolean isNotEmpty(Collection coll): 判断集合是否不为空
    
    int size(Object object): 计算集合的个数
    
    

    示例:

    List<String> list = new ArrayList<>();
    int size = CollectionUtils.size(list);
    
    if (CollectionUtils.isEmpty(list)) {
                
    }
    

    三、Objects

    jdk自带的类,用于处理对象,判空,转换字符串等。

    Objects常用方法:

    String toString(Object o): 将对象转换字符串,由于方法内使用了String.valueOf(),如果对象为 null,返回的是 "null"字符串。
    
    String toString(Object o, String nullDefault): 将对象转换字符串,如果对象为 null,就返回指定的默认值。
    
    boolean isNull(Object obj): 判断对象是否为空
    
    boolean nonNull(Object obj): 判断对象是否不为空
    

    示例:

    String name = Objects.toString( null , "0");
    if (Objects.isNull(name)) {
    
    }
    
    

    四、Google Guava

    谷歌出品的,非常实用。包含集合、并发、I/O、散列、缓存、字符串等。

    依赖:

    <dependency>
    	<groupId>com.google.guava</groupId>
    	<artifactId>guava</artifactId>
    	<version>18.0</version>
    </dependency>
    

    Joiner

    Joiner可以连接字符串。

    常用方法:

    Joiner on(String separator): 指定连接的符号
    
    Joiner skipNulls() : 跳过null
    
    String join(@Nullable Object first, @Nullable Object second, Object... rest): 连接多个字符串
    

    示例如下:

        public static void testJoiner() {
            //使用;来连接多个字符串,跳过null
            Joiner joiner = Joiner.on("; ").skipNulls();
            String join = joiner.join("Harry", null, "Ron", "Hermione");
            System.out.println(join);
    
            List<Integer> list = Arrays.asList(1, 5, 7);
            //list使用逗号连接
            String result = Joiner.on(",").join(list);
            System.out.println(result);
        }
    

    Splitter

    Splitter可以用来分隔字符串。

    常用方法:

    Splitter on(final String separator):指定Splitter的分隔符。
    
    Iterable<String> split(final CharSequence sequence) : 拆分字符串。
    
    List<String> splitToList(CharSequence sequence):拆分字符串,并转换成集合。
    注意,splitToList使用了@Beta注解,带有@Beta注解的类或方法可能会发生变化。
    它们可以随时以任何方式进行修改,甚至可以删除。不推荐使用。
    Splitter 返回List,可以使用 Lists.newArrayList(splitter.split(string))
    
    Splitter omitEmptyStrings():  从结果中自动忽略空字符串。
    
    Splitter fixedLength(final int length): 按固定长度拆分;最后一段可能比给定长度短,但不会为空。
    

    示例如下:

        public static void testSplit() {
            Splitter splitter = Splitter.on(",");
    
            System.out.println("按分隔符,去拆分字符串.如下:");
            Iterable<String> splits = splitter.split("a,,b,c");
            //遍历splitter的结果为 Iterable
            for (String split : splits) {
                System.out.println(split);
            }
        }
    
        public static void testSplitList() {
            System.out.println("split返回 list,如下:");
            // 输出结果 [a, , b, c]
            List<String> splitList = Lists.newArrayList( Splitter.on(",").split("a,,b,c"));
            System.out.println(splitList);
        }
    
        public static void testSplitOmitEmpty() {
            System.out.println("忽略空字符串,如下:");
            // 输出结果 [a, b, c]
            Iterable<String> omit = Splitter.on(",").omitEmptyStrings().split("a,,b,c");
            System.out.println(omit);
        }
        
        public static void testFixedLength() {
            System.out.println("按固定长度拆分;最后一段可能比给定长度短,但不会为空。如下:");
            //输出结果为 a,,b 以及 ,c
            Iterable<String> fixedLengths = Splitter.fixedLength(4).split("a,,b,c");
            for (String split : fixedLengths) {
                System.out.println(split);
            }
        }
    
    

    Lists类

    常用方法:

    ArrayList<E> newArrayList(): 初始化一个ArrayList
    
    List<List<T>> partition(List<T> list, int size) : list分页,参数 list 表示被分割的集合, size表示每一页的数量。
    

    示例:

    public static void testPartition() {
        List<String> list = Lists.newArrayList();
        list.add("lin");
        list.add("chen");
        list.add("wu");
        list.add("qiu");
        list.add("zhang");
        //分页,每页2个元素
        List<List<String>> partitionList = Lists.partition(list, 2);
        if (CollectionUtils.size(partitionList) > 1) {
            //下标是从0开始的,获取第2页的元素,先判断集合的size,避免数组越界。
            List<String> partList = partitionList.get(1);
            //结果为 [wu, qiu]
            System.out.println(partList);
        }
    }
    

    Maps类

    常用方法:

    HashMap<K, V> newHashMap() : 初始化Map
    

    示例如下:

    Map<String, String> map = Maps.newHashMap();
    

    Table

    Table是Guava中的一种数据结构,两个key对应一个value,相当于表格,某行某列对应一个值。

    • 常用方法:
    //以下泛型<R, C, V>,R表示Row(行),C表示Column(列), V表示Value(值)。
    <R, C, V> HashBasedTable<R, C, V> create(): 创建一个Table
    
    V put(R rowKey, C columnKey, V value): 在Table中指定行,指定列,放入对应的值。
    
    V get(@Nullable Object rowKey, @Nullable Object columnKey): 获取Table指定行,指定列的值。行和列不能为空。
    
    Map<C, V> row(R rowKey): 获取某一行的所有数据。
    
    Map<R, V> column(C columnKey);  获取某一列的所有数据。
    
    Set<Cell<R, C, V>> cellSet(); 获取Table的所有数据
    

    示例:

        public static void testTable() {
            Table<String, String, Integer> table = HashBasedTable.create();
    
            table.put("第一行", "第一列", 11);
            table.put("第一行", "第二列", 12);
            table.put("第二行", "第一列", 13);
            //获取Table的所有数据
            Set<Table.Cell<String, String, Integer>> cellSet = table.cellSet();
            System.out.println("cellSet:" + cellSet);
            for (Table.Cell<String, String, Integer> cell : cellSet) {
                String rowKey = cell.getRowKey();
                String columnKey = cell.getColumnKey();
                Integer value = cell.getValue();
                System.out.println("row:" + rowKey + " ,column:" + columnKey + ",value:" + value);
            }
            System.out.println("cellSet结束:" + cellSet);
            
            //获取对应行,对应列的数据
            Integer value = table.get("第一行", "第二列");
            System.out.println(value);
    
            //获取第一行的数据
            Map<String, Integer> rowMap = table.row("第一行");
    
            Map<String, Integer> columnMap = table.column("第一列");
            System.out.println(columnMap);
    
        }
    

    待补充

    参考资料:

    https://ifeve.com/google-guava/
    https://www.techug.com/post/java-libs-you-should-know.html
    https://blog.csdn.net/qq_15717719/article/details/114012722
    https://juejin.cn/post/6844904154113146894

  • 相关阅读:
    React初步学习-利用React构建个人博客
    React入门介绍(2)- React Component-React组件
    React入门介绍(1)-ReactDOM.render()等基础
    (3)Gojs model简介
    javascript脚本的延时加载
    javascript中的this作用域详解
    mongodb命令
    vim
    关于格式转换
    公告栏添加时钟
  • 原文地址:https://www.cnblogs.com/expiator/p/15876891.html
Copyright © 2020-2023  润新知