您的位置:首页 > 其它

guava Joiner

2016-06-18 17:00 344 查看
Joiner用来完成字符串的拼接

简单实例

使用guava创建一个包含a,b,c 3个元素的 ArrayList

List<String> lists = Lists.newArrayList("a", "b", "c");


如果要List中的元素用一个分隔符(“|”)连接起来。常用做法如下:

StringBuilder ret = new StringBuilder();
for(String ele:lists){
ret.append(ele).append("|");
}
ret.setLength(ret.length()-1);//去掉最后一个分隔符"|"


使用guava的话是这样的:

Joiner.on("|").join(lists);//结果是:a|b|c


可以看出来比以前简洁了很多

对于null的处理

如果上面的list中有null元素,使用
Joiner.on("|").join(lists)
就或抛出NPE(
NullPointerException
)异常,这时候可以用
skipNulls
useForNull
方法。

skipNulls:忽略null

userForNull:替换null

List<String> lists = Lists.newArrayList("a", "b", "c",null);
Joiner joiner = Joiner.on("|");
//joiner.join(lists);                 抛出异常
joiner.skipNulls().join(lists);      //忽略null,结果是: a|b|c
joiner.useForNull("*").join(lists);  //替换null,结果是: a|b|c|*


Joiner不可变性

Joiner实例都是不可变的,所以Joiner实例都是线程安全的,因此我们可以把Joiner实例声明为
static final
的。每个Joiner的操作都会生成一个新的Joiner实例。

比如下面的代码,
joiner
是一个实例,使用
skipNulls
方法后又产生一个实例
skipNullJoiner
,原来的
joiner
实例不会受影响。

Joiner joiner = Joiner.on("|");
Joiner skipNullJoiner=joiner.skipNulls();


Joiner使用对象

joiner不仅可以用来连接
Iterable
Iterator
、变长参数、数组



还可以用作
Appendable
接口的实例比如(
StringBuilder
,
FileWriter
)

List<String> lists = Lists.newArrayList("a", "b", "c",null);
Joiner joiner = Joiner.on("|").useForNull("*");
StringBuilder sb = new StringBuilder();
joiner.appendTo(sb, lists);
System.out.println(sb); //输出 a|b|c|*


MapJoiner

Joiner用来连接线性表的,MapJoiner可以用来连接map

HashMap<String, String> map = Maps.newHashMap();
map.put("a", "11");
map.put("b", "22");
map.put("c", "33");
Joiner.MapJoiner mapJoiner = Joiner.on(",").withKeyValueSeparator("=");
String join = mapJoiner.join(map);//输出 b=22,c=33,a=11


参照:

1、《getting started with google guava》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: