赞
踩
概述
工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率。谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来。所以就诞生了guava。
guava的优点:
1)高效设计良好的API,被Google的开发者设计,实现和使用
2)遵循高效的java语法实践
3)使代码更刻度,简洁,简单
4)节约时间,资源,提高生产力
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:
1)集合 [collections]
2)缓存 [caching]
3)原生类型支持 [primitives support]
4)并发库 [concurrency libraries]
5)通用注解 [common annotations]
6)字符串处理 [string processing]
7)I/O 等等。
引入gradle依赖(引入Jar包)
compile 'com.google.guava:guava:26.0-jre'
1.集合的创建
- // 普通Collection的创建
- List<String> list = Lists.newArrayList();
- Set<String> set = Sets.newHashSet();
- Map<String, String> map = Maps.newHashMap();
-
- // 不变Collection的创建
- ImmutableList<String> iList = ImmutableList.of("a", "b", "c");
- ImmutableSet<String> iSet = ImmutableSet.of("e1", "e2");
- ImmutableMap<String, String> iMap = ImmutableMap.of("k1", "v1", "k2", "v2");
-
- // 其他的黑科技集合
- MultiSet: 无序+可重复 count()方法获取单词的次数 增强了可读性+操作简单
- 创建方式: Multiset<String> set = HashMultiset.create();
-
- Multimap: key-value key可以重复
- 创建方式: Multimap<String, String> teachers = ArrayListMultimap.create();
- Multimap<String,Integer> map = ArrayListMultimap.create();
- map.put("aa", 1);
- map.put("aa", 2);
- System.out.println(map.get("aa")); //[1, 2]
创建不可变集合 先理解什么是immutable(不可变)对象
1)在多线程操作下,是线程安全的
2)所有不可变集合会比可变集合更有效的利用资源
2.将集合转换为特定规则的字符串(Joiner)
- //use java
- List<String> list = new ArrayList<String>();
- list.add("aa");
- list.add("bb");
- list.add("cc");
- String str = "";
- for(int i=0; i<list.size(); i++){
- str = str + "-" +list.get(i);
- }
- //str 为-aa-bb-cc
-
- //use guava
- List<String> list = new ArrayList<String>();
- list.add("aa");
- list.add("bb");
- list.add("cc");
- String result = Joiner.on("-").join(list);
- //result为 aa-bb-cc
-
- Map<String, Integer> map = Maps.newHashMap();
- map.put("xiaoming", 12);
- map.put("xiaohong",13);
- String result = Joiner.on(",").withKeyValueSeparator("=").join(map);
- // result为 xiaoming=12,xiaohong=13
3.将String转换为特定的集合(Splitter)
- //use java
- List<String> list = new ArrayList<String>();
- String a = "1-2-3-4-5-6";
- String[] strs = a.split("-");
- for(int i=0; i<strs.length; i++){
- list.add(strs[i]);
- }
-
- //use guava
- String str = "1-2-3-4-5-6";
- List<String> list = Splitter.on("-").splitToList(str);
- //list为 [1, 2, 3, 4, 5, 6]
-
- // guava还可以使用 omitEmptyStrings().trimResults() 去除空串与空格
- String str = "1-2-3-4- 5- 6 ";
- List<String> list = Splitter.on("-").omitEmptyStrings().trimResults().splitToList(str);
- System.out.println(list);
-
- // 将String转换为map
- String str = "xiaoming=11,xiaohong=23";
- Map<String,String> map = Splitter.on(",").withKeyValueSeparator("=").split(str);
-
- // guava还支持多个字符切割,或者特定的正则分隔
- String input = "aa.dd,,ff,,.";
- List<String> result = Splitter.onPattern("[.|,]").omitEmptyStrings().splitToList(input);
-
9.计算中间代码的运行时间
- Stopwatch stopwatch = Stopwatch.createStarted();
- for(int i=0; i<100000; i++){
- // do some thing
- }
- long nanos = stopwatch.elapsed(TimeUnit.MILLISECONDS);
- System.out.println(nanos);
11.guava缓存
- // 使用Guava创建一个缓存
- Cache<String, String> cache = CacheBuilder.newBuilder()
- .maximumSize(100) // 设置缓存的最大容量
- .expireAfterWrite(1, TimeUnit.MINUTES) // 设置缓存在写入一分钟后失效
- .concurrencyLevel(10) // 设置并发级别为10
- .recordStats() // 开启缓存统计
- .build();
- // 放入缓存
- cache.put("key", "value");
- // 获取缓存,getIfPresent 不存在就返回null
- String value = cache.getIfPresent("key");
-
- CacheBuilder.newBuilder()
- // 设置缓存在写入10分钟后,通过CacheLoader的load方法进行刷新
- .refreshAfterWrite(10, TimeUnit.SECONDS)
- // jdk8以后可以使用 Duration
- // .refreshAfterWrite(Duration.ofMinutes(10))
- .build(new CacheLoader<String, String>() {
- @Override
- public String load(String key) throws Exception {
- // 缓存加载逻辑
- ...
- }
- });
RateLimiter限流(https://zhuanlan.zhihu.com/p/38100340)
- @Component("rateLimitInterceptor")
- public class RateLimitInterceptor extends AbstractInterceptor {
- /**
- * 单机全局限流器(限制QPS为1)
- */
- private static final RateLimiter rateLimiter = RateLimiter.create(1);
- @Override
- protected ResponseEnum preFilter(HttpServletRequest request) {
- if (!rateLimiter.tryAcquire()) {
- System.out.println("限流中......");
- return ResponseEnum.RATE_LIMIT;
- }
- System.out.println("请求成功");
- return ResponseEnum.OK;
- }
- }
作者:小张同学99
链接:https://www.jianshu.com/p/3c7d3fcc63cb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。