normanli 2017-02-27 1246浏览量
在前面的章节,我们已经讨论了什么是GUAVA和怎样去安装GUAVA,在这一章我们将开始使用guava,我们将展示guava提供的基本功能,并且了解一下这些基本功能是怎样帮助我们简化日常工作遇到的的问题
在这一章节中,我们将覆盖一下几个方面的内容:
将一些普通的字符串以固定的分隔符组装在一起是我们在平常工作遇到的,比如将一个Array,List,iterable包含的内容组转成字符串,最常见的就是使用循环将字符串拼接在StringBuilder上,一般的代码如下:
这段代码要注意的就是要将最后一个分隔符去掉。这段代码不是很复杂,但是没有什么价值,完全可以使用Joiner类实现。 下面是一个简单的例子,使用Joiner类以 “|” 将字符串分隔:
Joiner.on("|").skipNulls().join(StringList);
这段代码以简洁明明了的方式实现字符串分隔的功能,降低了代码出错的概率。 如果你需要将List中的null值以一个特殊的值代替,那么可以用下面的代码实现:
Joiner.on("|").userForNull(“no value”).join(stringList).
关于Joiner有如下几点我们需要强调:
//the useForNull() method returns a new instance
of the Joiner!
stringJoiner.useForNull("missing");
stringJoiner.join("foo","bar",null);`
在这个例子中,useForNull这个方法返回了一个新的Joiner对象,对原来的stringJoiner没有任何影响,因此当运行这个例子的时候,最后一个null对象还是会被忽略,不会变成 missing.
Joiner joiner = Joiner.on("|").skipNulls();
//returns the StringBuilder instance with the values foo,bar,baz
appeneded with "|" delimiters
joiner.appendTo(stringBuilder,"foo","bar","baz")`
在这个例子中,我们传递了个一个StringBuilder的实例给Joiner Class,joiner.appedTo 会将 foo,bar,baz 以 “|”分隔,并将值给stringBuilder.
List dateList = getDates();
Joiner joiner = Joiner.on("#").useForNulls(" ");
//returns the FileWriter instance with the values
appended into it
joiner.appendTo(fileWriter,dateList);`
这里我们看到了一个和上面类似的例子,我们传递一个FileWriter的实例和一个包含了Date的list给Joiner 类,Joiner 类会将包含日期的list追加到FileWriter实例上。
从上面的例子中我们可以看到,Joiner类在处理一些基本任务是非常容易的,并且非常容易的。 在我们将目光离开Joiner类之前,我们来看一个特殊的类 MapJoiner,MapJoiner的使用方式和Joiner差不多,但是有一点不同的是: 他是将key/value以特地的分隔符分隔,创建一个MapJoiner类可以采用如下方式:mapJoiner = Joiner.on("#").withKeyValueSeparator("=");
让我们快速的看一下这段代码做了什么事:
下面是一个例子展示MapJoiner的使用:
`@Test
public void testMapJoiner() {
//Using LinkedHashMap so that the original
order is preserved
String expectedString = "Washington D.C=Redskins#New York
City=Giants#Philadelphia=Eagles#Dallas=Cowboys";
Map testMap = Maps.newLinkedHashMap();
testMap.put("Washington D.C","Redskins");
testMap.put("New York City","Giants");
testMap.put("Philadelphia","Eagles");
testMap.put("Dallas","Cowboys");
String returnedString = Joiner.on("#").
withKeyValueSeparator("=").join(testMap);
assertThat(returnedString,is(expectedString));
}`
前面的单元测试的例子中,我们使用Maps的一个静态工厂类的newLinkedHashMap方法创建了一个LinkedHashMap. 这个方法可以在com.google.common.collect包中找到。 Joiner 类将map中的每个对象以"#"分隔. withKeyValueSeparator 返回MapJoiner类,将map里面的key/value对象以"="分隔。 最后我们使用Assert进行断言。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
集结各类场景实战经验,助你开发运维畅行无忧