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