Guava是什么?


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

Guava的好处


  • 标准化 - Guava库是由谷歌托管。
  • 高效 - 可靠,快速和有效的扩展JAVA标准库
  • 优化 -Guava库经过高度的优化。

函数式编程:增加Java功能和处理能力

实用程序:提供经常需要在应用程序中开发的许多实用程序类

验证:提供标准的故障安全验证机制。

最佳实践:强调最佳的做法。

总之,它是一个提高代码质量、简化工作,促使代码更有弹性、更加简洁的工具。

Guava依赖+Junit依赖


<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>

Joiner详细介绍


package com.lvshihao.guava;

import com.google.common.base.Joiner;
import com.google.common.io.Files;
import org.junit.Test;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map; import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsSame.sameInstance;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail; /**
*@author: LVSHIHAO
*@description: GUAVA Joiner detailed introduction
*/
public class JoinerTest { private final List<String> stringList= Arrays.asList("Java","Scala","Kafaka","Guava","Google");
private final List<String> stringListWithNullValue=Arrays.asList("Java","Scala","Kafaka","Guava",null);
private final String targetFileName="D:\\IDEA_PROJECT\\test\\src\\test\\java\\files\\guava-joiner.txt";
private final Map<String,String> stringMap=new LinkedHashMap<>();
{
stringMap.put("hello","lvshihao");
stringMap.put("my","lvbu");
}
@Test
public void testJoinOnJoin(){
/**
* on()是连接的字符 is connect character
* join()是连接的方法 is connect method
*/
//此时运行没有问题但是如果出现有NULL的值就会连接失败出现空指针异常
String result1= Joiner.on("#").join(stringList);
assertThat(result1,equalTo("Java#Scala#Kafaka#Guava#Goole"));
} @Test
public void testJoinOnJoinWithNullValueButSkip(){
/**
* skipNulls()不拼接为NULL的元素 not append by null element
*/
//此时运行就没有问题,因为skipNulls()帮我们跳过NULL的元素
String result2= Joiner.on("#").skipNulls().join(stringListWithNullValue);
assertThat(result2,equalTo("Java#Scala#Kafaka#Guava"));
} @Test
public void testJoinOnJoinWithNullValueButUseDefaultValue(){
/**
* useForNull()使用默认值代替NULL元素 use default replace null element
*/
//此时运行就没有问题,因为useForNull()使用default帮我们代替NULL元素
String result2= Joiner.on("#").useForNull("default").join(stringListWithNullValue);
assertThat(result2,equalTo("Java#Scala#Kafaka#Guava#DEFALUT"));
} @Test
public void testJoinOnAppendToStringBuilder(){
/**
* appendTo()使用传入的可变字符串对象进行拼接 use afferent variable character string object conduct append
*/
final StringBuilder builder=new StringBuilder();
StringBuilder resultBuilder = Joiner.on("#").useForNull("default").appendTo(builder, stringListWithNullValue);
assertThat(resultBuilder,sameInstance(builder));
assertThat(resultBuilder.toString(),equalTo("Java#Scala#Kafaka#Guava#DEFALUT"));
assertThat(builder.toString(),equalTo("Java#Scala#Kafaka#Guava#DEFALUT"));
} @Test
public void testJoinOnAppendToWriter(){
try (FileWriter fileWriter=new FileWriter(new File(targetFileName));){
Joiner.on("#").useForNull("default").appendTo(fileWriter, stringListWithNullValue);
assertThat(Files.isFile().test(new File(targetFileName)),equalTo(true));
} catch (IOException e) {
fail("append to the writer occur fetal error");
}
} @Test
public void testJoinOnWithMap(){
assertThat(Joiner.on("#").withKeyValueSeparator("=").join(stringMap),equalTo("hello=lvshihao#my=lvbu"));
}
}

Guava入门第一章(Joiner)的更多相关文章

  1. MySQL----MySQL数据库入门----第一章 数据库入门

    第一章 数据库入门 1.1 数据库基础知识 1.1.1 数据库概述 数据不仅包括普通意义上的数字,还包括文字.图像.声音等.也就是说,凡是在计算机中用来描述事物的记录都可称作数据. 数据库的基本特点: ...

  2. JAVA 入门第一章(语法基础)

    本人初学java 博客分享记录一下自己的学习历程 java我的初步学习分为六章,有c和c++的基础学起来也简便了很多. 第一章 语法基础 第二章 面向对象 第三章 常用工具类 第四章 文件操纵 第五章 ...

  3. 关于阮大神的es6标准入门第一章

    题记:之前在10月份的时候写过阮大神的es6的第一章,但是由于那段时间项目组的动荡,所以也没有什么后续,导致我现在对es6基本都忘的差不多了,不过,现在换了新公司,最近也没什么任务,所以现在开始重新写 ...

  4. C基础入门 - 第一章 - C语言绪言

    第1章 C语言绪言 1.1 C语言概述 1.1.1 C语言世界 1.1.2 C语言学习, 能当饭吃吗 1.2 开发环境构建 1.2.1 visual studio安装使用 1.2.2 visual s ...

  5. Java入门第一章

    后天就是十一长假了,亲们准备好了去哪儿玩了吗? 今天有点空,就来聊聊Java吧,当然是一些Java入门知识了,网上有很多,这里我只是列举一些我自己学到的,感谢大家关注喵的博客这么久,也为大家带来点新知 ...

  6. RabbitMQ 消息队列 入门 第一章

    RabbitMQ : 官网:https://www.rabbitmq.com/ GitHub:https://github.com/rabbitmq?q=rabbitmq 第一步安装: 点击  htt ...

  7. Java入门第一章知识点总结

    -d是directory 目录的意思 cls:清楚doc里面的内容 ipconfig:显示网络配置信息 java -version:检查安装的jdk版本信息 是类型自动向上转换.  在输出时,根据当前 ...

  8. Linux基础入门 第一章:Linux环境搭建——Redhat 6.4图文安装教程

    1.创建新的虚拟机 2.选择自定义 3.选择Workstation 10.0 4.选择稍后安装操作系统 5.选择Red Hat 6 64位 6.对虚拟机命名和选择安装位置 7.选择处理器配置 8.选择 ...

  9. mvc5+ET6入门第一章

    这一篇主要讲的是MVC也就是Model--View--Controller的缩写,没有讲ET.其中 Model(模型)表示应用程序核心(比如数据库记录列表).通常模型对象在数据库中存取数据. View ...

随机推荐

  1. 暑假自学java第二天

    今天学习了一些java规则 一个java源文件的公开类只能有一个,而且必学和源文件名相同. 了解到java的标识符规范,这对以后的团队协作有很大作用. 标识符规则和c++还是很相似的 java中的字面 ...

  2. [心得笔记]spring常用的三种依赖注入方式

    一.目前使用最广泛的 @Autowired:自动装配 基于@Autowired的自动装配,默认是根据类型注入,可以用于构造器.接口.方法注入,使用方式如下: @Autowired 构造方法.方法.接口 ...

  3. Vue.js 作用域、slot用法(单个slot、具名slot)

    作用域 在介绍slot前,需要先知道一个概念:编译的作用域.比如父组件中有如下模板: <child-component> {{message}} <child-component&g ...

  4. netcore3.1 + vue (前后端分离)生成PDF(多pdf合并)返回前端打印

    1.使用Adobe Acrobat XI Pro编辑pdf模板 2.公共类代码 3.service层调用 4.Controller层 5.前端(Vue) 因为print.js不支持宋体,所以打算用后台 ...

  5. FTP服务—三种登录类型的配置方法

    目录 一.部署 二.配置vsftpd 1.匿名用户登录配置 2.系统用户登录配置 3.虚拟用户登录配置 1. 创建虚拟用户名单文件 2. 生成虚拟用户口令认证文件 3. 创建FTP根目录及虚拟用户映射 ...

  6. RSTP_PA协商过程

    P/A协商的基本需求: P:①DP端口,②discarding A:①P2P链路 所有交换机的stp mode改为rstp,确保sw2的g0/0/3为AP,sw3的g0/0/3为DP 把sw3的g0/ ...

  7. 如何修改Windows 11 任务栏大小

    1.首先Win+R输入regedit打开注册表编辑器         2.进入注册表编辑器后,在地址栏中输入: HKEY_CURRENT_USER\Software\Microsoft\ Window ...

  8. Java+Selenium3.3.1环境搭建

    一.背景和目的 selenium从2.0开始,加入了webdriver,实际上,我们说的selenium自动化测试,大部分情况都是在使用webdriver的API.现在去Selenium官网,发现最新 ...

  9. C语言:for语句原理及具体执行过程

    #include <stdio.h> int main() { int i,s=0; for(i=1;;i*=2) { s=s+i; if(i%3==0) break; i=i+2; pr ...

  10. android体温登记APP开发过程+问题汇总+源码

    源码上传至https://github.com/durtime/myproject下的temperature 实际效果:   开发过程 1.首先进行布局文件的编写,布局前台页面 2.布置两个按钮,一个 ...