Guava常用工具库整理
本文主要包括以下几方面:
1. Joiner 连接串的使用
2. Splitter 分隔符的使用
3. 简化写法
4. Guava Cache 缓存
使用guava之前,先引入依赖
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version> </dependency>
一、Joiner 连接串的使用
在jdk中,可以使用String类下的join方法,但有个弊端,要求集合中的元素都是String类型。
List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); String join = String.join(",", list); System.out.println(join);//1,2
2、使用第三方的org.apache.commons.lang3.StringUtils工具包也有个join方法
Integer[] arr = new Integer[]{3,4,5,6}; System.out.println(StringUtils.join(arr, "#"));//3#4#5#6
guava提供的 Joiner 类,可以很好的解决这一问题
List<String> list2 = Arrays.asList("Google", "Guava", "Java", "Scala", "Kafka"); String result = Joiner.on("; ").join(list2); System.out.println(result);//Google; Guava; Java; Scala; Kafka ------------------------------------------------------------------------ List<Integer> list3 = Arrays.asList(1,5,7); String result3 = Joiner.on(",").join(list3); System.out.println(result3);//1,5,7 //将Map转成String Map<String,Object> map = new HashMap<>(); map.put("name","jack"); map.put("age",12); String result4 = Joiner.on(",").withKeyValueSeparator("=").join(map); System.out.println(result4);//name=jack,age=12
二、Splitter 分隔符的使用
//传统写法 String temp = "Hello|Java"; List<String> list = Arrays.asList(temp.split("\\|"));//注意需要转义 System.out.println(list); //guava的写法 List<String> list = Splitter.on("|").splitToList("Hello|Java"); System.out.println(list);//[Hello, Java] //根据分隔符, 分割几次字符串. List<String> list = Splitter.on("#").limit(3).splitToList("Java#C++#C#Shell"); System.out.println(list);//[Java, C++, C#Shell] //将url中的键值对存储到map里面 Map<String, String> map = Splitter.on("&").withKeyValueSeparator('=').split("id=123&name=green"); System.out.println(map);//{id=123, name=green}
三、简化写法
快速简单的创建List、Map集合,不需要两边都加上泛型,使代码更加的简洁
使用java原生创建HashMap是这样的
Map<String, Object> hashMap = new HashMap<String, Object>();
使用guava创建一个HashMap时,可以这样。
Map<String, Object> hashMap = Maps.newHashMap();
使用java原生创建ArrayList是这样的
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
使用guava创建一个ArrayList时,可以这样。
List<Map<String,Object>> list = Lists.newArrayList();
初始化Map,这种方式的弊端是map被初始化后不能在进行put操作
Map<String, String> map = ImmutableMap.of("name", "jack","age", "23");
或者
Map<String, String> map= ImmutableMap.<String, String>builder() .put("name", "jack") .put("age", "23") .build(); System.out.println(map);//{name=jack, age=23}
初始化List
List<String> names = newArrayList("alpha", "beta", "gamma");
或者
List<String> names = Lists.newArrayList("alpha", "beta", "gamma"); System.out.println(names);//[alpha, beta, gamma]
四、Guava Cache 缓存
主要面向本地缓存,轻量级的Cache,适合缓存少量数据,不需要配置文件,使用起来和ConcurrentHashMap一样简单,而且能覆盖绝大多数使用cache的场景需求!
下面先定义一个存储缓存的容器,也就是Cache接口的实现类,接口类型为泛型,可以很好的支持不同类型的key和value
public class CacheManager { private static Cache<String,Object> dataMap = CacheBuilder.newBuilder() //设置cache的初始大小为10,要合理设置该值 .initialCapacity(100) .maximumSize(1000) //设置并发数为5,即同一时间最多只能有5个线程往cache执行写入操作 .concurrencyLevel(5) //设置cache中的数据在写入之后的存活时间 .expireAfterWrite(3, TimeUnit.SECONDS) .build(); public static void put(String key,Object value){ dataMap.put(key,value); } //如果key不存在,返回null public static Object get(String key){ return dataMap.getIfPresent(key); } //移除key public static void remove(String key){ dataMap.invalidate(key); } public static void main(String[] args) throws InterruptedException { CacheManager.put("name","jack"); System.out.println(CacheManager.get("name"));//jack CacheManager.remove("name"); System.out.println(CacheManager.get("name"));//null } }