Google Guava学习计划第一章Guava Utilities—Joiner and Splitter
来源:互联网 发布:贴吧云签到源码 编辑:程序博客网 时间:2024/05/16 07:18
关于Google Guava在从多线程ListenableFuture 开始对其充满好感。Java代码写久了,总想着怎么去优雅和简洁,自己也接触过一段时间的scala,函数式风格确实让我十分喜欢,但是工作大部分还是Java。所以考虑通过google guava和Java1.8(stream,Function),1.9新特性从实用性和优雅上可以满足下自己。
立一个Flag,在2018-2月之前学完Guava(基于版本23.0)计划
计划表如下,对应的CSDN博客也会不断更新。希望和大家一起进步。
今天介绍的Joiner和Splitter
Joiner:google 实现的类似Apache Commons中的字符串拼接的工具类,输入多样化。输入: List Array Map 等 而且支持emptyFilter,JoinWithDefalutValue,appendToFile,stringBUffer等
Splitter:google 实现的类似Apache Commons中的字符串拆解的工具类。解析过程中含有比较使用等功能
fixedLength(3) trimResults() omitEmptyStrings() limit() withKeyValueSeparator()结成返回迭代器或者Map等
下面等具体Demo 采用maven 方式来演示
JoinerTest 大部分采用Joiner来实现,也有一部分java1.8的stream方式。
package Utilities;import com.google.common.base.Joiner;import com.google.common.io.Files;import com.google.common.primitives.ImmutableIntArray;import org.junit.Test;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.Arrays;import java.util.List;import java.util.Map;import static com.google.common.collect.ImmutableMap.of;import static java.util.stream.Collectors.joining;import static org.hamcrest.CoreMatchers.sameInstance;import static org.hamcrest.core.IsEqual.equalTo;import static org.junit.Assert.assertThat;import static org.junit.Assert.fail;/** *{@link List} * * @author mengxp * @date 2017-12-10 * @version 1.0 * */public class JoinerTest { private final List<String> stringList=Arrays.asList( "Google","Guava","Java","Scala","Kafka" ); private final String[] stringArray= new String[]{"Jone","JK","Love"}; private final List<String> stringListWithNullValue=Arrays.asList( "Google","Guava","Java","Scala",null ); private final String targetFileName="H:\\project\\GoogleGuava\\src\\main\\joiner_file.txt"; private final Map<String,String> stringMap= of("key1","value1","key2","value2"); @Test public void testJoinOnJoin(){ //String join = Joiner.on("#").join(stringListWithNullValue); String join = Joiner.on("#").join(stringList); assertThat(join,equalTo("Google#Guava#Java#Scala#Kafka")); } @Test public void testJoinOnJoinArray(){ //String join = Joiner.on("#").join(stringListWithNullValue); String join = Joiner.on("#").join(stringArray); assertThat(join,equalTo("Google#Guava#Java#Scala#Kafka")); } @Test public void testJoinOnJoinWithNullValue(){ String join = Joiner.on("#").skipNulls().join(stringListWithNullValue); assertThat(join,equalTo("Google#Guava#Java#Scala")); } @Test public void testJoinOnJoinWithDefaultValue(){ String join = Joiner.on("#").useForNull("MMMM").join(stringListWithNullValue); assertThat(join,equalTo("Google#Guava#Java#Scala#MMMM")); } @Test public void testJoinOnAppendTo_StringBuffer(){ final StringBuilder builder=new StringBuilder(); StringBuilder resultbuild = Joiner.on("#").useForNull("MMMM").appendTo(builder, stringListWithNullValue); assertThat(resultbuild,sameInstance(builder)); assertThat(resultbuild.toString(),equalTo("Google#Guava#Java#Scala#MMMM")); } @Test public void testJoinOnAppendTo_Writer(){ try(FileWriter fileWriter=new FileWriter(new File(targetFileName))){ Joiner.on("#").useForNull("MMMM").appendTo(fileWriter,stringListWithNullValue); assertThat(Files.isFile().test(new File(targetFileName)),equalTo(true)); } catch (IOException e) { fail(); } } //采用JDK1.8的来实现 //Predicate Consumer Function都是java 8的新接口 //Steam中Supplier:供应商 //Stream:高特性的流迭代器 //String::contact //Intermediate:中间的(流的过滤等,每个操作会返回新的流) Terminal:末端终点(执行完这类操作后 stream不能被使用了) Short-circuiting:短回路的 @Test public void testJoinByStream(){ String collect = stringListWithNullValue.stream().filter(item -> item != null&&!item.isEmpty()).collect(joining("#")); assertThat(collect,equalTo("Google#Guava#Java#Scala#")); } @Test public void testJoinByStreamUserDefalutValue(){ String collect = stringListWithNullValue.stream() .map(item -> item != null&&!item.isEmpty()? item:"DEFALUT") .collect(joining("#")); assertThat(collect,equalTo("Google#Guava#Java#Scala#")); } //其中this::defalutValue 代表这方法的引用 @Test public void testJoinByStreamUserDefalutValueUseOtherDisplay(){ String collect = stringListWithNullValue.stream() .map(this::defalutValue) .collect(joining("#")); assertThat(collect,equalTo("Google#Guava#Java#Scala#")); } private String defalutValue(final String item){ return item != null&&!item.isEmpty()? item:"DEFALUT"; } //对map的操作 @Test public void testJoinerToMap(){ String join = Joiner.on(",").withKeyValueSeparator("=").join(stringMap); assertThat("xx",equalTo(join)); }}Splitter和JoinerTest功能刚好相反
package Utilities;import com.google.common.base.Splitter;import org.junit.Test;import java.util.List;import java.util.Map;import java.util.regex.Pattern;import static org.hamcrest.CoreMatchers.equalTo;import static org.junit.Assert.assertThat;/** * @author mengxp * @date 2017-12-10 * @version 1.0 */public class SpliterTest { /** * 封装成集合 trimResults将结果进行trim omitEmptyStrings 忽略空值 */ @Test public void testSplitOnSplit() { List<String> result = Splitter.on("|").trimResults().omitEmptyStrings().splitToList("hell0 | world||u|need|java||"); assertThat(result.size(), equalTo(5)); } /** * 将字符串aaabbbcccddd 按照3个长度进行分割 */ @Test public void testSplitFixlength() { List<String> result = Splitter.fixedLength(3).trimResults().omitEmptyStrings().splitToList("aaabbbcccddd"); assertThat(result.size(), equalTo(4)); System.out.println(result); } /** * action: 当 Splitter.on("|").limit(3) 逐渐的ccc|ddd会作为一个元素 * aaa|bbb|ccc|ddd ==》[aaa, bbb, ccc|ddd] */ @Test public void testSplit() { List<String> result = Splitter.on("|").limit(3).trimResults().omitEmptyStrings().splitToList("aaa|bbb|ccc|ddd"); assertThat(result.size(), equalTo(3)); System.out.println(result); } /** * 支持正则表达式字符串和Pattern */ @Test public void testSplitOnPatternString() { List<String> result = Splitter.onPattern("\\|").limit(3).trimResults().omitEmptyStrings().splitToList("aaa|bbb|ccc|ddd"); assertThat(result.size(), equalTo(3)); System.out.println(result); } /** * 支持pattern的正则表达式。 */ @Test public void testSplitOnPattern() { List<String> result = Splitter.on(Pattern.compile("\\|")).limit(3).trimResults().omitEmptyStrings().splitToList("aaa|bbb|ccc|ddd"); assertThat(result.size(), equalTo(3)); System.out.println(result); } /** * SplitToMap */ @Test public void testSplitOnToMap(){ Map<String, String> map = Splitter.on(Pattern.compile("\\|")).trimResults().omitEmptyStrings().withKeyValueSeparator("=").split("key1=V1||||key2=V2"); assertThat(map.size(), equalTo(2)); System.out.println(map); }}如果项目中刚好可以用上,希望对大家有帮助。
下一篇 会是函数式的Preconditions&Objects&assert
阅读全文
0 0
- Google Guava学习计划第一章Guava Utilities—Joiner and Splitter
- Google Guava学习计划第一章Guava Utilities—Preconditions_ComparisonChain_Strings_CharMatcher
- Google Guava学习计划第一章Guava Utilities—Function_Predicate_Maps_Sets
- Google Guava学习计划第一章Guava Utilities—StopWatch和ServerLoader
- Google Guava 库 CharMatcher 、Joiner以及Splitter
- 【Guava】Joiner、Splitter源码
- guava之Joiner 和 Splitter
- guava之Joiner 和 Splitter
- guava之Joiner 和 Splitter
- Guava字符串处理Joiner、Splitter
- Google Guava学习计划第三章Guava Utilities—I/O操作
- Guava——Joiner连接字符串Splitter分割字符串
- Google Guava Splitter
- guava 之 Joiner Splitter处理字符串利器
- Guava中Splitter和Joiner的用法
- google guava Joiner 示列
- guava Joiner
- guava Joiner
- InnoDB.pdf 英文原版 免费下载
- EasyDemo*Menu体系结构图(on Github)
- VB中逻辑关系小结
- 很多知识点,感觉这个思路很值得学习
- C语言与数据库操作入门(Win版)
- Google Guava学习计划第一章Guava Utilities—Joiner and Splitter
- C#web引用迁移到遇到问题
- Redis 分布式锁的正确实现方式( Java 版 )
- The Well-Grounded Java Developer.pdf 英文原版 免费下载
- python numpy基础
- EasyDemo*Dialog体系结构图(on Github)
- 某些加快程序程序的小技巧
- 关于页面带值跳转,获取不到所传递的值
- logistic的应用