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