系列文章目录
今天给大家说一下 Google 开源的 Guava 工具库 , 该工具库非常强大,能简化我们的开发。
前言
提示:编写代码的过程中,总会遇到一些字符串的拼接,Map、List、set集合的遍历,过滤,组装等,自己实现代码看起来就会很冗余,而且还会出现bug,这时候我们可以借用一些工具来帮助我们实现。下面是我总结的常用的一些方法
提示:以下是本篇文章正文内容,下面案例可供参考
一、导入依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<!--guava 版本地址:https://mvnrepository.com/artifact/com.google.guava/guava-->
示例:Guava 是 Google 开源的 工具库
二、DEMO代码
//集合创建:
Map<String, Map<String, String>> map = Maps.newHashMap();
List<List<Map<String, String>>> list = Lists.newArrayList();
//集合初始化:
Set<String> set = Sets.newHashSet("one","two","three");
set.add("aaa");
List<String> lists = Lists.newArrayList("a","b","c");
//分割字符串
String s = " adsf, sd, fa ,,fa, sd, fasld,fa ";
Splitter splitter = Splitter.on(",")
.omitEmptyStrings()// 跳过空值
.trimResults(); //去除字符前后空格
System.out.println(splitter.split(s).toString());//[adsf, sd, fa, fa, sd, fasld, fa]
Lists.newArrayList(splitter.split(s)); //Iterable 转 list
//Splitter 通过正则表达式分割字符串
Splitter.onPattern("\\s+").split("1 \t 2 3");//[1,2,3]
//拼接
//跳过null值
String value = Joiner.on("-").skipNulls().join(lists);//a-b-c
//表明你想匹配的一个确定的字符。
boolean b = CharMatcher.is('a').matchesAllOf("aaa"); //true
int count = CharMatcher.is('b').countIn("ababa");//总共出现的次数 2
int i = CharMatcher.is('b').indexIn("ababa");//第一次出现目标字符的位置 1
int in = CharMatcher.is('b').lastIndexIn("ababa");//最后一次出现目标字符的位置 3
String s1 = CharMatcher.anyOf("ab").removeFrom("ababac");//移除指定字符串c
String join = Ints.join(",", 1, 2, 4);
System.out.println(join);//1,2,4
int[] concat = Ints.concat(new int[]{1, 2}, new int[]{2, 3});
System.out.println(concat.length);//注意这是拼接不会去重
List<Integer> integers = Lists.newArrayList(1,2,4);
int[] ints = Ints.toArray(integers); // 集合转数组
int max = Ints.max(ints);// 获取数组最大值 最小值 Ints.min(ints)
boolean contains = Ints.contains(ints, 2);// 是否包含
// 避免空值 jdk8以上也有该工具类
Optional<Integer> optional = Optional.of(1);
optional.isPresent(); //true 有值true 为空false
optional.get(); //1 获取结果
/**
* 比较两个map集合
*/
Map<String,Object> map1 = Maps.newHashMap();
map1.put("a","A");map1.put("b","B");map1.put("d","D");
Map<String,Object> map2 = Maps.newHashMap();
map2.put("a","A1");map2.put("c","C");map2.put("d","D");
MapDifference<String, Object> difference = Maps.difference(map1, map2);
//返回key相等 value不相等的
System.out.println(difference.entriesDiffering()); // 输出: {a=(A, A1)}
// 返回key和value都相等的
System.out.println(difference.entriesInCommon()); // 输出: {d=D}
// 返回只在map1(第一个入参)中出现的key
System.out.println(difference.entriesOnlyOnLeft()); // 输出: {b=B}
// 返回只在map2(第二个入参)中出现的key
System.out.println(difference.entriesOnlyOnRight()); // 输出: {c=C}
// map 过滤
// 可以同时比较key和value
Map<String, Object> map3 = Maps.filterEntries(map1, x -> "a".equals(x.getKey()) && "A".equals(x.getValue()));
// 比较key
Map<String, Object> map4 = Maps.filterKeys(map1, x -> "b".equals(x));
// 比较value
Map<String, Object> map5 = Maps.filterValues(map1, x -> "b".equals(x));
//一键多值的Map
//ArrayListMultimap HashMultimap LinkedListMultimap ....
Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.putAll("a",Lists.newArrayList("A","C"));
System.out.println(multimap);// {a=[A, C]}