由 Google 公司开源,Guava是一种基于开源的Java库,Google Guava源于2007年的"Google Collections Library"。这个库是为了方便编码,并减少编码错误。这个库用于提供集合,缓存,支持原语句,并发性,常见注解,字符串处理,I/O和验证的实用方法。

Guava Utilites常用API

  • 1. Joiner
  • 2. Splitter
  • 3. Preconditions
  • 4. Objects
  • 5. Strings

1. Joiner

String res = Joiner.on("#").join(要拼接的集合);
assertThat(res,equalTo(拼接后的结果));//跳过NUll拼接
Joiner.on("#"),skipNUlls().join(要拼接的集合);//碰到null都被替换成别的
Joiner.on("#"),useForNull("Defult").join(要拼接的集合);//返回的值和要拼接的是同一个对象
StringBuilder resultBuilder = Joiner.on("->").useForNull("*").appendTo(new StringBuilder("E"), stringListWithNullValue);//写入文档中private final String targetFileName = "D:\\Users\\Desktop\\guava\\guava-test.txt";try (FileWriter writer = new FileWriter(new File(targetFileName))) {Joiner.on("->").useForNull("*").appendTo(writer, stringListWithNullValue);assertThat(Files.isFile().test(new File(targetFileName)), equalTo(true));} catch (IOException e) {fail("append to the writer occur fetal error");}//stream流 拼接
stringListWithNullValue.stream().filter(item -> item != null && !item.isEmpty()).collect(Collectors.joining("->"));//stream流拼接使用默认替代null值
stringListWithNullValue.stream().map(item -> item == null || item.isEmpty() ? "*" : item).collect(Collectors.joining("->"));//拼接map集合
private final Map<String, String> stringMap = ImmutableMap.of("I", "am", "you", "is");
Joiner.on("->").withKeyValueSeparator("=").join(stringMap);//拼接map集合并写入txt文件
try (FileWriter writer = new FileWriter(new File(targetFileNameToMap))) {Joiner.on("->").withKeyValueSeparator("=").appendTo(writer, stringMap);assertThat(Files.isFile().test(new File(targetFileNameToMap)), equalTo(true));
} catch (IOException e) {fail("append to the writer occur fetal error");}

2. Splitter

    public void testslitSplit() {List<String> result = Splitter.on("|").splitToList("A|B|C");assertThat(result, notNullValue());assertThat(result.size(), equalTo(3));assertThat(result.get(0), equalTo("A"));assertThat(result.get(1), equalTo("B"));assertThat(result.get(2), equalTo("C"));}public void testsplit_On_Split_OmitEmpty() {List<String> result = Splitter.on("|").splitToList("A|B|C||");assertThat(result, notNullValue());assertThat(result.size(), equalTo(5));//忽略空值result = Splitter.on("|").omitEmptyStrings().splitToList("A|B|C||");assertThat(result.size(), equalTo(3));}public void testsplit_On_Split_OmitEmpty_TrimResult() {List<String> result = Splitter.on("|").omitEmptyStrings().splitToList("A | B|C||");assertThat(result.size(), equalTo(3));assertThat(result.get(0), equalTo("A "));assertThat(result.get(1), equalTo(" B"));assertThat(result.get(2), equalTo("C"));//trimResults()  去掉空格result = Splitter.on("|").trimResults().omitEmptyStrings().splitToList("A | B|C||");assertThat(result.size(), equalTo(3));assertThat(result.get(0), equalTo("A"));assertThat(result.get(1), equalTo("B"));assertThat(result.get(2), equalTo("C"));}public void testsplitFixLength() {List<String> result = Splitter.fixedLength(2).splitToList("aabc");assertThat(result, notNullValue());assertThat(result.size(), equalTo(2));assertThat(result.get(0), equalTo("aa"));assertThat(result.get(1), equalTo("bc"));}public void testsplitOnSplitLimit() {List<String> result = Splitter.on("#").limit(3).splitToList("A#B#C#D");assertThat(result, notNullValue());assertThat(result.size(), equalTo(3));assertThat(result.get(0), equalTo("A"));assertThat(result.get(1), equalTo("B"));assertThat(result.get(2), equalTo("C#D"));}public void testsplitOnPatternString() {//支持正则表达式分割(传递一个字符串)List<String> result = Splitter.onPattern("\\|").trimResults().omitEmptyStrings().splitToList("A|B|C||");assertThat(result, notNullValue());assertThat(result.size(), equalTo(3));assertThat(result.get(0), equalTo("A"));assertThat(result.get(1), equalTo("B"));assertThat(result.get(2), equalTo("C"));}public void testsplitOnPattern() {//支持正则表达式分割(传递一个Pattern对象)List<String> result = Splitter.on(Pattern.compile("\\|")).trimResults().omitEmptyStrings().splitToList("A|B|C||");assertThat(result, notNullValue());assertThat(result.size(), equalTo(3));assertThat(result.get(0), equalTo("A"));assertThat(result.get(1), equalTo("B"));assertThat(result.get(2), equalTo("C"));}public void testsplitOnSplitToMap() {//分割装进Map中withKeyValueSeparator("=")Map<String,String> result = Splitter.on(Pattern.compile("\\|")).trimResults().omitEmptyStrings().withKeyValueSeparator("=").split("A=a| B=b|C=c||");assertThat(result, notNullValue());assertThat(result.size(), equalTo(3));assertThat(result.get("A"), equalTo("a"));assertThat(result.get("B"), equalTo("b"));assertThat(result.get("C"), equalTo("c"));}

3. Preconditions

//检查是否为null
Preconditions.checkNotNull(list);//检查不为null,并返回message
Preconditions.checkNotNull(list, "The list should not be null");//返回带数字的message
Preconditions.checkNotNull(list, "The list should not be null and size must be %s", 2);//判断参数类型
Preconditions.checkArgument();//判断线程状态  IllegalStateException
Preconditions.checkState();//判断索引
List<String> list = ImmutebleList.of("张三","李四");
Preconditions.checkElementIndex(10,list.size());//请求的对象不能为null
Object.requireNonNull(null);

4. Objects

import com.google.common.base.MoreObjects;
import com.google.common.collect.ComparisonChain;
import java.util.Calendar;public class ObjectsTest {static class Guava implements Comparable<Guava> {private final String manufacturer;private final String version;private final Calendar releaseDate;public Guava(String manufacturer, String version, Calendar releaseDate) {this.manufacturer = manufacturer;this.version = version;this.releaseDate = releaseDate;}@Overridepublic String toString() {return MoreObjects.toStringHelper(this).omitNullValues().add("manufacturer", this.manufacturer).add("version", this.version).add("releaseDate", this.releaseDate).toString();}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Guava guava = (Guava) o;return Objects.equals(this.manufacturer, guava.manufacturer)&& Objects.equals(this.version, guava.version)&& Objects.equals(this.releaseDate, guava.releaseDate);}@Overridepublic int hashCode() {return com.google.common.base.Objects.hashCode(manufacturer, version, releaseDate);}@Overridepublic int compareTo(Guava o) {return ComparisonChain.start().compare(this.manufacturer, o.manufacturer).compare(this.version, o.version).compare(this.releaseDate, o.releaseDate).result();}}public static void main(String[] args) {Guava guava1 = new Guava("Google", "23.0", Calendar.getInstance());System.out.println(guava1);System.out.println(guava1.hashCode());Calendar calendar = Calendar.getInstance();calendar.add(Calendar.YEAR, 1);Guava guava2 = new Guava("Google", "23.0", calendar);System.out.println(guava1.compareTo(guava2));}
}

5. Strings

@Test
public void testStringsMethods() {//将空字符串变为nullassertThat(Strings.emptyToNull(""),equalTo(null));//将null变为空字符串assertThat(Strings.nullToEmpty(null),equalTo(""));//公共前缀assertThat(Strings.commonPrefix("hahaha","hihihi"),equalTo("h"));//公共后缀assertThat(Strings.commonSuffix("hahaha","hihihi"),equalTo(""));//重复制定数量assertThat(Strings.repeat("嗨",3),equalTo("嗨嗨嗨"));//判断为空或者为nullassertThat(Strings.isNullOrEmpty(null),equalTo(true));//补充字符串到指定长度,头部填充assertThat(Strings.padStart("嗨嗨嗨",5,'嗨'),equalTo("嗨嗨嗨嗨嗨"));//补充字符到指定长度,尾部填充assertThat(Strings.padEnd("嗨嗨嗨",5,'来'),equalTo("嗨嗨嗨来来"));}@Test
public void testCharMatcher() {//匹配是否为数字类型assertThat(CharMatcher.javaDigit().matches('5'),equalTo(true));//判断字符串中包含某个字符的数量assertThat(CharMatcher.is('A').countIn("AAABBCA"),equalTo(4));//将一个或多个空格替换成*assertThat(CharMatcher.breakingWhitespace().collapseFrom("    a b   c  ",'*'),equalTo("*a*b*c*"));//assertThat(CharMatcher.javaDigit().or(CharMatcher.whitespace()).removeFrom("4a 1 2 3 b"),equalTo("ab"));//保留空格和数字assertThat(CharMatcher.javaDigit().or(CharMatcher.whitespace()).retainFrom("4a12 3b"),equalTo("412 3"));}

Google-Guava(Utilites)相关推荐

  1. Error:Could not download guava.jar (com.google.guava:guava:19.0): No cached version available for of

    今天从git导入demo 报错 Error:Could not download guava.jar (com.google.guava:guava:19.0): No cached version ...

  2. 为什么我不建议你用阿里巴巴Java规范,而使用 Google Guava 编程?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来自 | 张丰哲 链接 | www.jianshu.com ...

  3. 为什么推荐 Java 程序员使用 Google Guava 编程

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来自 | 张丰哲 链接 | www.jianshu.com/p/97778b21bd00 前言 ...

  4. [Google Guava] 1.3-常见Object方法

    原文链接 译者: 沈义扬 equals 当一个对象中的字段可以为null时,实现Object.equals方法会很痛苦,因为不得不分别对它们进行null检查.使用Objects.equal帮助你执行n ...

  5. Google Guava Collections 使用介绍

    原帖http://www.open-open.com/lib/view/open1325143343733.html 简介: Google Guava Collections 是一个对 Java Co ...

  6. [Google Guava] 3-缓存

    原文地址  译文地址    译者:许巧辉  校对:沈义扬 范例 01 LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() ...

  7. [Google Guava] 11-事件总线

    原文链接 译文连接 译者:沈义扬 传统上,Java的进程内事件分发都是通过发布者和订阅者之间的显式注册实现的.设计EventBus就是为了取代这种显示注册方式,使组件间有了更好的解耦.EventBus ...

  8. [Google Guava] 2.4-集合扩展工具类

    原文链接 译文链接 译者:沈义扬,校对:丁一 简介 有时候你需要实现自己的集合扩展.也许你想要在元素被添加到列表时增加特定的行为,或者你想实现一个Iterable,其底层实际上是遍历数据库查询的结果集 ...

  9. [Google Guava] 8-区间

    原文链接 译文链接 译文:沈义扬 范例 1 List scores; 2 Iterable belowMedian =Iterables.filter(scores,Range.lessThan(me ...

  10. [Google Guava] 6-字符串处理:分割,连接,填充

    原文链接 译文链接 译者:沈义扬,校对:丁一 连接器[Joiner] 用分隔符把字符串序列连接起来也可能会遇上不必要的麻烦.如果字符串序列中含有null,那连接操作会更难.Fluent风格的Joine ...

最新文章

  1. 一段关于低价的对话(被低价困扰的安利伙伴进!)
  2. 13款经典JavaScript图形和图表绘制工具
  3. 交叉编译inetutils并配置telnet服务
  4. AI:《Why is DevOps for Machine Learning so Different?—为什么机器学习的 DevOps 如此不同?》翻译与解读
  5. Java实现拼音转汉字
  6. 作为IT面试官,我如何考核计算机专业毕业生?作为培训班老师,我又如何提升他们?...
  7. 计算机usb共享网络泄密,杜绝USB泄密 MyUSBOnly
  8. ces测试数据测试ces测试数据测试ces测试数据测试ces测试数据测试ces测试数据测试ces测试数据测试ces测试数据测试ces测试数据测试ces测试数据测试ces测试数据测试
  9. jdbc odbc java mysql数据库连接_Java数据库连接之配置ODBC数据源
  10. 用自然语言教育人工智能:百度新算法发展出zero-shot学习能力
  11. oracle进入到root用户,Linux环境中普通用户切换到root用户问题
  12. 抓包工具 tcpdump tshark
  13. 畅谈云原生(上):云原生应用应该是什么样子?
  14. 汶川地震《生死不离》歌词
  15. CodeForces 274B Zero Tree :每次选包含1节点的一棵子树,将该子树所有值都+1或者-1最少多少步可以使树值全部为0 :树型dp...
  16. echarts 柱状图如何不顶格_echarts柱状图如何中间对齐而不是底部对齐?
  17. JavaScript--百度地图那些坑
  18. zookeeper集群节点为什么是奇数个
  19. 接口文档与接口文档管理工具
  20. 数据结构与算法面试题

热门文章

  1. 面向对象_猫狗案例加入跳高功能代码实现
  2. 一图读懂 | “数据二十条”
  3. 五个最好的DVD播放器下载
  4. C#+Arduino使用红外遥控器
  5. JS实现注册登录发送短信验证码动态显示60S倒计时完整案例
  6. 详解RocketMQ中的consumer
  7. python数据标准_python-StandardScaler数据标准化
  8. 应急照明和疏散指示系统在化工厂房中的设计与产品选型
  9. AD ADSI入门
  10. Android关联文件类型,使得自己app支持打开【加入到“用其它应用打开”的列表中】