Guava入門第一章(Joiner)
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")); } }