前言
guava为我们提供很多工具类
限流
RateLimiter这里不展开来讲解,还有一个是semaphore信号限流
字符串分割,合并
一般会使用String自带的split,但是会碰到说存在null的数值
guava提供了Splitter,还有Joiner,看下如何使用的:
Splitter splitter = Splitter.on(",").omitEmptyStrings().trimResults();
splitter.split("a, ,b").forEach(System.out::println);
Joiner joiner = Joiner.on("|").skipNulls();
System.out.println(joiner.join(Lists.newArrayList("a", null, "cc")));
这样就不需要判断空值。
int数组的各种骚操作
System.out.println(Ints.join("!", 1, 2, 3));
System.out.println(Ints.max(1, 2, 3, 4, 5));
join是将数组使用符号隔开,源码是将他们转成char类型,遍历一遍将符号写进去
Multimap
如果我早知道这个类就好了,为啥?
有一次我需要记录问卷的答案,如果它是多选甚至量表题(恶心的二维数组的答案)我们可以使用Multimap进行储存。而不用使用Map<String,List<String>>进行保存题号,以及答案。我们看下它怎么使用的:
Multimap<String, String> multiMap = ArrayListMultimap.create();
multiMap.put("1", "大鸡腿");
multiMap.put("1", "你好呀");
multiMap.put("2", "wtf");
Collection<String> value=multiMap.get("1");
value.stream().forEach(System.out::println);
输出
大鸡腿
你好呀
一般来说在map里面如果存在两个一样的key,value会被取代。但是multimap会持续叠加记录结果。
Optional
预防空指针的操作
可以看下我之前的博客
总结:我们可以看到guava在很多地方针对空指针进行相应的处理,确实我们生产中会遇到很多的空指针,我们每天都在写bug,西西