优秀的编程知识分享平台

网站首页 > 技术文章 正文

Guava-常用的java工具集推荐(java必备工具)

nanyue 2024-08-02 18:01:31 技术文章 8 ℃

Guava是一组来自谷歌的核心Java库,包括新的集合类型(如multimap和multiset)、不可变集合、图形库,以及用于并发、I/O、哈希、缓存、原语、字符串等的实用工具!它在谷歌内部的大多数Java项目中被广泛使用,也被许多其他公司广泛使用。

传送门

做人怎么可以不留传送门呢。

github:https://github.com/google/guava

github文档:https://github.com/google/guava/wiki/Home

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

ps:有没有发现国内写得像模像样的介绍大部分是从github上翻译过来的。

Objects

对象equals比较,不需要担心哪个对象在前面、为空造成的空指针;

Objects.equal(a,b)

Spliter/Joiner

字符串的分割及连接处理

String msg = "zhangsan,lisi  ,wangwu,,," ;
System.out.println(msg);
List<String> list = Splitter.on(",") // 初始化分隔符
    .trimResults()      // 去掉前后的空格
    .omitEmptyStrings() // 去除空字符串
    .splitToList(msg);  // 设置要分割的字符串
System.out.println(list);
msg = Joiner.on("@")        // 初始化分隔符
    .skipNulls()        // 去除空字符串
    .join(list);        // 设置要连接的list
System.out.println(msg);

结果信息

zhangsan,lisi  ,wangwu,,,
[zhangsan, lisi, wangwu]
zhangsan@lisi@wangwu

HashMutilmap

复合结构的HashMap,见过这样的结构吗,HashMap<String,List<String>>,现在可以不用这么写了,可以直接用HashMutlmap<String,String>,通过get方式获取到的就是集合的结果;

HashMultimap<String,String> multimap = HashMultimap.create();
multimap.put("key1", "value1");
multimap.put("key1", "value2");
multimap.get("key1").forEach(System.out::println);

guava里面同类型的支持更多的类型,如ArrayListMultimap,LinkedListMultimap

SortedMap

我在项目中经常遇到这种情况,在两个系统交互是参数信息需要按照字母顺序排序后签名或加密处理,这个时候可以使用SortedMap的处理了

HashMap<String,String> names = new HashMap<>();
names.put("zhangsan", "张三");
names.put("lisi", "李四");
names.put("wangwu", "王五");
ImmutableSortedMap<String,String> sortedMap = ImmutableSortedMap.copyOf(names);
sortedMap.forEach((k,v)->System.out.println(k+"="+v));

ImmutableSortedMap<String, Integer> salary = new ImmutableSortedMap
        .Builder<String, Integer>(Ordering.natural())
        .put("John", 1000)
        .put("Jane", 1500)
        .put("Adam", 2000)
        .put("Tom", 2000)
        .build();
salary.forEach((k,v)->System.out.println(k+"="+v));

集合工具类

ArrayList<String> list = Lists.newArrayList();
ArrayList<Student> list2 = Lists.newArrayList();
HashSet<String> set = Sets.newHashSet();
HashMap<String,Student> map = Maps.newHashMap();

基本类型

int min = Ints.min(1,2,3);//最大值最小值
boolean isEmpty = Strings.isNullOrEmpty(student.getName());//非空判断
Bytes.concat(byte1,byte2)//字节数组合并

CharMatcher

字符串的匹配处理,该类中有丰富的字符串匹配处理,不过我用得很少,用得最多的是

//去除所有的换行 tab字符
CharMatcher.JAVA_ISO_CONTROL.removeFrom(string)

更多操作可以看一下官方说明:

https://github.com/google/guava/wiki/StringsExplained#charmatcher

反射和缓存

这两部分在实际使用中用处也很大,奈何有其他的更好的反射和缓存框架了,这个有空再说吧。

<dependency>
  <groupId>org.reflections</groupId>
  <artifactId>reflections</artifactId>
  <version>0.9.12</version>
</dependency>
<dependency>
  <groupId>com.github.ben-manes.caffeine</groupId>
  <artifactId>caffeine</artifactId>
  <version>3.0.3</version>
</dependency>

听着好听但没用到的

Optional

常用的用法就是做非空判断,让代码看起来好看一点儿

虽然Guava里面有这个类,但JDK8里面也实现了该处理,不做多说;

改天再详细说JDK8里面的用法;

Preconditions

内置的前置条件判断方法,主要是通过抛出异常的方式进行有效性验证,其实在实际开发中很鸡肋,完全可以用JDK自带的功能,再辅以业务判断,拒绝通过异常的方式处理问题;

Ordering

基本没用到的比较器

Throwables

没有用到过


你看,奇怪的知识是不是又增加了

最近发表
标签列表