Guava常用工具库整理

简介: Guava常用工具库整理

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
    }
}


相关文章
|
5月前
|
缓存 算法 Java
提升编程效率的利器: 解析Google Guava库之常用工具类-40个示例(七)
提升编程效率的利器: 解析Google Guava库之常用工具类-40个示例(七)
|
5月前
|
安全 Java 测试技术
提升编程效率的利器: 解析Google Guava库之集合篇BitMap(三)
提升编程效率的利器: 解析Google Guava库之集合篇BitMap(三)
|
5月前
|
存储
提升编程效率的利器: 解析Google Guava库之集合篇RangeMap范围映射(六)
提升编程效率的利器: 解析Google Guava库之集合篇RangeMap范围映射(六)
|
5月前
|
存储 安全 Java
提升编程效率的利器: 解析Google Guava库之集合篇Immutable(一)
提升编程效率的利器: 解析Google Guava库之集合篇Immutable(一)
|
5月前
|
缓存 安全 Java
提升编程效率的利器: 解析Google Guava库之集合工具类-50个示例(八)
提升编程效率的利器: 解析Google Guava库之集合工具类-50个示例(八)
|
6月前
常用工具方法--持续更新
常用工具方法--持续更新
38 0
|
6月前
|
存储 安全 Java
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(不可变集合篇)
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(不可变集合篇)
74 1
|
6月前
|
Java API Apache
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(基础编程篇)
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(基础编程篇)
84 0
|
6月前
|
存储 缓存 安全
Guava:Java开发者的全方位工具库
Guava:Java开发者的全方位工具库
220 0
|
缓存 安全 JavaScript
别再造轮子了,Google 开源的 Guava 工具库真心强大!
别再造轮子了,Google 开源的 Guava 工具库真心强大!