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"));
}
}