package guavaTest;

 import com.google.common.base.CharMatcher;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Lists;
import com.google.common.primitives.Ints;
import com.google.common.util.concurrent.*;
import org.checkerframework.checker.nullness.compatqual.NullableDecl; import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; /**
* Google guava 的使用
*/
public class GuavaTest { //连接器(对于Joiner,常用的方法是 跳过NULL元素:skipNulls() / 对于NULL元素使用其他替代:useForNull(String))
// private static final Joiner joiner = Joiner.on(",").skipNulls();
private static final Joiner joiner = Joiner.on(",").useForNull("我是空字符串"); //分割器(对于Splitter,常用的方法是:trimResults()/omitEmptyStrings()。注意拆分的方式,有字符串,还有正则,还有固定长度分割(太贴心了!))
private static final Splitter splitter = Splitter.on(",").trimResults().omitEmptyStrings(); public static void main(String[] args) { String join = joiner.join(Lists.newArrayList("a", null, "b"));
System.out.println("join:" + join); // a, ,b,,
for (String tmp : splitter.split("bb,lll,kkk,,,,,,,,")) {
System.out.println("|" + tmp + "|");
} List<Integer> integers = Ints.asList(1, 2, 3, 4, 5, 6); System.out.println(Ints.join(",", 1, 2, 3, 4)); //原生数组类型快速合并
int[] concat = Ints.concat(new int[]{1, 2, 3}, new int[]{7, 8, 9});
System.out.println(concat.length); //求最大、最小
System.out.println(Ints.max(concat) + "" + Ints.min(concat)); //是否包含,不用循环查找了
System.out.println(Ints.contains(concat, 9)); //集合到数组的转换
System.out.println(Ints.toArray(integers)); //Map<String,List<String>>
ArrayListMultimap<String, String> listMultimap = ArrayListMultimap.create(); listMultimap.put("张晓明", "数学");
listMultimap.put("张晓明", "语文");
listMultimap.put("张晓明", "物理");
listMultimap.put("王小二", "英语"); test(); } public static void test() { ExecutorService service = Executors.newFixedThreadPool(10);
ListeningExecutorService listeningExecutorService = MoreExecutors.listeningDecorator(service);
ListenableFuture<Integer> listenableFuture = listeningExecutorService.submit(() -> { if (new Random().nextInt(3) == 2) {
throw new NullPointerException();
}
return 1; }); FutureCallback<Integer> futureCallback = new FutureCallback<Integer>() { @Override
public void onSuccess(@NullableDecl Integer result) {
System.out.println("---------" + result);
} @Override
public void onFailure(Throwable t) {
System.out.println("------------" + t.getMessage());
} }; Futures.addCallback(listenableFuture, futureCallback); } }

guava的一些用法的更多相关文章

  1. Google Guava的splitter用法

    google的guava库是个很不错的工具库,这次来学习其spliiter的用法,它是一个专门用来 分隔字符串的工具类,其中有四种用法,分别来小结 1 基本用法: String str = " ...

  2. 【java】【guava】Google Guava的splitter用法

    Google Guava的splitter,分割字符串的用法 package com.sxd.swapping.guava; import com.google.common.base.CharMat ...

  3. Guava Cache用法介绍<转>

    Guava Cache是在内存中缓存数据,相比较于数据库或redis存储,访问内存中的数据会更加高效.Guava官网介绍,下面的这几种情况可以考虑使用Guava Cache: 愿意消耗一些内存空间来提 ...

  4. Guava Cache用法介绍

    背景 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用.在日长开发有很多场合,有一些数据量不是很大,不会经常改动,并且访问非常频繁.但是由于受限于硬盘IO的性能或者远程网络 ...

  5. 【Guava】Guava Cache用法

    背景 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用.在日长开发有很多场合,有一些数据量不是很大,不会经常改动,并且访问非常频繁.但是由于受限于硬盘IO的性能或者远程网络 ...

  6. Spring配置cache(concurrentHashMap,guava cache、redis实现)附源码

    在应用程序中,数据一般是存在数据库中(磁盘介质),对于某些被频繁访问的数据,如果每次都访问数据库,不仅涉及到网络io,还受到数据库查询的影响:而目前通常会将频繁使用,并且不经常改变的数据放入缓存中,从 ...

  7. guava eventbus 原理+源码分析

    前言: guava提供的eventbus可以很方便的处理一对多的事件问题, 最近正好使用到了,做个小结,使用的demo网上已经很多了,不再赘述,本文主要是源码分析+使用注意点+新老版本eventbus ...

  8. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  9. String split方法与Guava Splitter用法区别

    String split方法与Guava Splitter用法区别 今天同事写了一段使用String split方法的代码,如下所示,同事期望得到的是字符"1",但是没想到却得到空 ...

随机推荐

  1. oracle——学习之路(oracle内置函数)

    oracle与很多内置函数,主要分为单行函数与集合函数. 首先要提一下dual表,它oracle的一个表,没有什么实质的东西,不能删除它,否则会造成Oracle无法启动等问题,他有很大用处,可以利用它 ...

  2. 创建Sqoop作业,报错Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONObject

    WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P in ...

  3. Python学习笔记:流程控制

    单分支: if 条件: 满足条件后执行的代码 程序举例: leiyu=28if leiyu > 22: print("You can find girl friend..." ...

  4. mysql-tpcc测试

    os: centos 7.4 db: mysql 5.7 software: tpcc-mysql TPC-C是专门针对联机交易处理系统(OLTP系统)的规范. tpcc-mysql是percona基 ...

  5. 思科设备ACL与NAT技术

    ACL 访问控制列表(Access Control Lists),是应用在路由器(或三层交换机)接口上的指令列表,用来告诉路由器哪些数据可以接收,哪些数据是需要被拒绝的,ACL的定义是基于协议的,它适 ...

  6. X86逆向4:VMP壳内寻找注册码

    本节课将讲解一下重启验证,重启验证在软件中也是非常的常见的,重启验证的原理很简单,用户在注册界面输入注册码以后程序会自动将输入的注册信息保存到配置文件中,这里可能保存到注册表,也可能使用INI文件来保 ...

  7. Mysterious Crime CodeForces - 1043D (哈希)

    大意: 给定m个n排列, 求有多少个公共子串. 枚举每个位置, hash求出最大匹配长度. #include <iostream> #include <sstream> #in ...

  8. Lua 截取字符串(截取utf-8格式字符串)

    对utf-8完全没概念的可以看看我上一篇随笔:简单说说utf-8编码格式 另外,还要知道string.sub 和 string.byte 的用法. 先上完整代码: local StringHelper ...

  9. Java Serializable Objects(序列化)

    https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html 序列化一个对象,意味着把这个对象的状态转化为字节流,而且个字节流 ...

  10. APOC官网触发器示例执行后Web页面一直转圈

    apoc使用触发器:如apoc官网指导 CREATE (d:Person {name:'Daniel'}) CREATE (l:Person {name:'Mary'}) CREATE (t:Pers ...