zoukankan      html  css  js  c++  java
  • Java之Google Guava使用举例

     简介:

      Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。 所有这些工具每天都在被Google的工程师应用在产品服务中。

      中文教程:https://ifeve.com/google-guava/

    依赖包:

            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>29.0-jre</version>
            </dependency>

    源码:

    package tools.guava;
    
    import com.google.common.base.Joiner;
    import com.google.common.base.Splitter;
    import com.google.common.collect.ArrayListMultimap;
    import com.google.common.collect.HashMultimap;
    import com.google.common.collect.Lists;
    import com.google.common.collect.Multimap;
    import com.google.common.primitives.Chars;
    import com.google.common.primitives.Ints;
    import org.junit.Test;
    
    import java.awt.*;
    import java.util.List;
    import java.util.Set;
    import java.util.function.Supplier;
    import java.util.logging.Logger;
    
    public class MyGuava {
        private final Logger logger = Logger.getLogger(this.getClass().getName());
    
        /**
         * 字符串拼接
         */
        @Test
        public void testGuavaJoiner() {
            // 快速创建List
            List<String> list = Lists.newArrayList("a", "b", null, "c");
    
            Joiner joiner = Joiner.on(",").skipNulls();
            String join = joiner.join(list);
            logger.info(join);  // a,b,c
    
            Joiner joiner2 = Joiner.on(",").useForNull("d");
            String join2 = joiner2.join(list);
            logger.info(join2);  // a,b,d,c
    
            /**
             * 跳过NULL元素:skipNulls()
             * 对于NULL元素使用其他替代:useForNull(String)
             * */
        }
    
        /**
         * 字符串分解
         */
        @Test
        public void testGuavaSplitter() {
            // 快速创建List
            String string = "a,b, ,c,";
            Splitter splitter = Splitter.on(",").trimResults().omitEmptyStrings();
            //输出结果: a b c
            splitter.split(string).forEach(x -> logger.info(x));
    
        }
    
        @Test
        public void testGuavaOpts() {
            // 快速创建List
            List<Integer> intList = Ints.asList(1, 2, 3, 4, 5);
            logger.info(intList.toString());
    
            // 数组的组装:1,2,3
            logger.info(Ints.join(",", 1, 2, 3));
    
    //        原生类型数据快速合并
            int[] newIntArray = Ints.concat(new int[]{1, 2}, new int[]{1, 2, 3});
            logger.info(String.valueOf(newIntArray.length));
    
            // 最大、最小值:3,1
            logger.info(Ints.max(newIntArray) + "," + Ints.min(newIntArray));
    
            // 是否包含:true
            logger.info(String.valueOf(Ints.contains(newIntArray, 3)));
            logger.info(String.valueOf(Chars.contains(new char[]{'a', 'b', 'c'}, 'c')));
    
            // 集合转换为数组
            int[] intArray = Ints.toArray(intList);
    
        }
    
        /**
         * 一对多键值对:multimap
         */
        @Test
        public void testGuavaMultimap() {
            Multimap<String, String> multimap = ArrayListMultimap.create();
    //        Multimap<String, String> multimap = HashMultimap.create();
            multimap.put("a", "1");
            multimap.put("a", "11");
            multimap.put("b", "2");
            multimap.put("b", "22");
            multimap.put("b", "222");
            multimap.put("c", "3");
    
            // 查询
            System.out.println(multimap);
            System.out.println(multimap.get("b"));
            System.out.println(multimap.get("b").toArray()[0]);
            System.out.println(((List<String>) multimap.get("b")).get(0));
    
            // 遍历-方法1
            Set<String> keys = multimap.keySet();
            for (String key : keys) {
                System.out.println("遍历-1:" + multimap.get(key));
            }
    
            // 遍历-方法2
            multimap.keySet().forEach(x -> System.out.println("遍历-2:" + multimap.get(x)));
    
            // 删除
            multimap.remove("b", "2");
            multimap.removeAll("a");
            System.out.println(multimap);
            System.out.println(Lists.newArrayList(multimap.entries()));
    
            /**
             * 运行结果:
             * {a=[1, 11], b=[2, 22, 222], c=[3]}
             * [2, 22, 222]
             * 2
             * 遍历-1:[1, 11]
             * 遍历-1:[2, 22, 222]
             * 遍历-1:[3]
             * 遍历-2:[1, 11]
             * 遍历-2:[2, 22, 222]
             * 遍历-2:[3]
             * {b=[22, 222], c=[3]}
             * [b=22, b=222, c=3]
             * */
        }
    
    
    }
  • 相关阅读:
    JavaScript观察者模式
    JavaScript装饰者模式
    使用uni-app开发小程序,关于小程序更新后与用户本地不会及时更新解决办法
    6.3 基于二分搜索树、链表的实现的集合Set复杂度分析
    解决uni-app props 传递数组修改后不能使用问题
    6.2 集合和映射--集合Set->底层基于链表实现
    6.1 集合和映射--集合Set->底层基于二叉搜索树实现
    【刷题记录
    【codeforces
    【loj
  • 原文地址:https://www.cnblogs.com/gongxr/p/14133277.html
Copyright © 2011-2022 走看看