guava工具类常用方法

Guava是Google开发的一个Java开源工具类库,它提供了许多实用的工具类和功能,可以简化Java编程中的常见任务。

引入依赖

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

Joiner

把集合或数组通过指定分隔符连接成字符串

java 复制代码
        List<String> a = new ArrayList<>();
        a.add("a");
        a.add("b");
        a.add("c");

        Joiner joiner = Joiner.on(",");
        System.out.println(joiner.join(a));// a,b,c

        a.add(null);
        // 忽略null
        Joiner joiner1 = Joiner.on(",").skipNulls();// a,b,c
        System.out.println(joiner1.join(a));

        Joiner joiner2 = Joiner.on(",").useForNull("替代");// a,b,c,替代
        System.out.println(joiner2.join(a));

Splitter

Splitter工具类将一个字符串按照逗号进行分割,并将分割后的结果存储在一个Iterable<String>对象中

java 复制代码
        String str="a,b,c";
        Splitter splitter = Splitter.on(",");
        Iterable<String> iterable = splitter.split(str);
        System.out.println(iterable); // [a, b, c]
        str="a,b,,c";
        // omitEmptyStrings 过滤掉空白的字符串
        Splitter splitter1 = Splitter.on(",").omitEmptyStrings();
        Iterable<String> iterable1 = splitter1.split(str);
        System.out.println(iterable1); // [a, b, c]
        str="a,b, c ";
        // trimResults 去除前后空格
        Splitter splitter2 = Splitter.on(",").trimResults();
        Iterable<String> iterable2 = splitter2.split(str);
        System.out.println(iterable2); // [a, b, c]
        // 转为集合
        List<String> splitToList = splitter2.splitToList(str);
        System.out.println(splitToList);

下划线和驼峰互转

java 复制代码
        String str="student_name";
        // 下划线转驼峰
        System.out.println(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, str)); //半驼峰 studentName
        System.out.println(CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, str)); //全驼峰 Student_name
        str="studentName";
        // 驼峰转下划线
        System.out.println(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, str)); // student_name

集合操作

快速生成集合

java 复制代码
        ArrayList<String> stringArrayList = Lists.newArrayList("a", "b", "c");
        HashSet<String> stringHashSet = Sets.newHashSet("a", "b", "c");
        

集合分类

大集合分裂成多个集合

java 复制代码
        ArrayList<String> stringArrayList = Lists.newArrayList("a", "b", "c");
        // 把stringArrayList分成小的集合,小的集合大小是2
        List<List<String>> partition = Lists.partition(stringArrayList, 2);
        System.out.println(partition); // [[a, b], [c]]

转集合

基本类型转集合

java 复制代码
         System.out.println(Ints.asList(1, 2, 3)); // [1, 2, 3]
        System.out.println(Longs.asList(1l, 2, 3)); // [1, 2, 3]
        System.out.println(Floats.asList(12.3f, 3.2f, 2.2f)); // [12.3, 3.2, 2.2]

HashMultiset

HashMultiset可以存储重复的元素,并且提供了方便的方法来统计每个元素的数量。它继承自AbstractMultiset类并实现了SerializableCloneable接口。

java 复制代码
        HashMultiset<String> multiset = HashMultiset.create();
        multiset.add("a");
        multiset.add("b");
        multiset.add("c");
        multiset.add("a");
        System.out.println(multiset); // [a x 2, b, c]
        Set<Multiset.Entry<String>> entries = multiset.entrySet();
        System.out.println(entries); // [a x 2, b, c]
        for (Multiset.Entry<String> entry : entries) {
            System.out.println("元素:" + entry.getElement() + ",个数:" + entry.getCount());
            // 元素:a,个数:2
            // 元素:b,个数:1
            // 元素:c,个数:1
        }
        Set<String> elementSet = multiset.elementSet();
        System.out.println(elementSet); // [a, b, c]
        for (String element : elementSet) {
            System.out.println("元素:" + element);
            // 元素:a
            // 元素:b
            // 元素:c
        }

HashMultimap

HashMultimap允许一个键对应多个值。它继承自AbstractMultimap类并实现了SerializableCloneable接口。

java 复制代码
        HashMultimap<String, String> multimap = HashMultimap.create();
        multimap.put("a","1");
        multimap.put("a","2");
        multimap.put("a","3");
        Collection<String> values = multimap.get("a");
        System.out.println(values); // [1, 2, 3]
        // 是否包含key=a,value=1的entry
        System.out.println(multimap.containsEntry("a", "1"));
        Map<String, Collection<String>> jkdMap = multimap.asMap(); // true
        System.out.println(jkdMap); // {a=[1, 2, 3]}

ImmutableList

ImmutableList是Guava库中的一个集合类,它是一个不可变的(immutable)列表,即一旦创建就不能被修改。与标准Java的List接口不同,ImmutableList的内容在创建后就不能被改变。它实现了List接口,并提供了一组只读的操作方法来访问列表中的元素。

java 复制代码
        ImmutableList<Object> immutableList = ImmutableList.builder().add("a").build();
        // 报错 java.lang.UnsupportedOperationException
//        immutableList.add("b");
        // 原生jdk
        List<String> list = new ArrayList<>();
        list.add("a");
        List<String> jdkUnmodifiableList = Collections.unmodifiableList(list);
        // jdk原生同样报错 java.lang.UnsupportedOperationException
//        jdkUnmodifiableList.add("c");
        // 但是可以对list操作
        list.add("c");
        System.out.println(jdkUnmodifiableList); // [a, c]

Preconditions

Preconditions是Guava库中的一个工具类,用于在代码中进行前置条件的检查。它提供了一组静态方法,可以验证参数、状态或其他条件是否满足,并在不满足条件时抛出相应的异常。使用Preconditions可以增强代码的可读性和健壮性,有效地进行参数校验和错误处理。

java 复制代码
          String str=null;
//        Preconditions.checkNotNull(str,"参数不能为空"); // NullPointerException: 参数不能为空
        Preconditions.checkArgument(str != null ,"参数不能为空"); // IllegalArgumentException: 参数不能为空
相关推荐
serve the people3 分钟前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
qmx_071 小时前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
为风而战1 小时前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
技术无疆3 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
架构文摘JGWZ6 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
拾光师7 小时前
spring获取当前request
java·后端·spring
aPurpleBerry7 小时前
neo4j安装启动教程+对应的jdk配置
java·neo4j
我是苏苏7 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
xujinwei_gingko7 小时前
Spring IOC容器Bean对象管理-Java Config方式
java·spring
2301_789985947 小时前
Java语言程序设计基础篇_编程练习题*18.29(某个目录下的文件数目)
java·开发语言·学习