字符串处理
Joiner是连接器,Splitter是分割器,通常我们会把它们定义为static final,利用on生成对象后在应用到String进行处理,这是可以复用的。
对于Joiner,常用的方法是 跳过NULL元素:skipNulls() / 对于NULL元素使用其他替代useForNull(String)
对于Splitter,常用的方法是: trimResults()/omitEmptyStrings()。注意拆分的方式,有字符串,还有正则,还有固定长度分割
/**
* 连接器
*/
private static final Joiner joiner = Joiner.on(",").skipNulls();
/**
* 分割器
*/
private static final Splitter splitter = Splitter.on(",").trimResults().omitEmptyStrings();
public static void main(String[] args) {
String string = "111, ,222,,33";
String join = joiner.join(Lists.newArrayList("a",null,"b"));
System.out.println(join);
for (String s:splitter.split(string)) {
System.out.println(s);
}
}
//输出结果:
//a,b
//111
//222
//33
对基本类型进行支持
guava提供了Bytes/Shorts/Ints/Iongs/Floats/Doubles/Chars/Booleans这些基本数据类型的扩展支持.
//快速创建集合
List list = Ints.asList(1,2,3,4);
System.out.println(Ints.join(",",1,2,3));
//数组合并
int[] newArray = Ints.concat(new int[]{1,2},new int[]{3,4});
System.out.println(newArray.length);
//选出最大最小
System.out.println(Ints.max(newArray)+","+Ints.min(newArray));
System.out.println(Ints.contains(newArray,3));
//集合转成数组
int[] ints = Ints.toArray(list);
集合
Multiset就是无序的,但是可以重复的集合
Multiset multiset = HashMultiset.create();
multiset.add(1);
multiset.add(2);
multiset.add(3);
multiset.add(3);
//计算元素个数
System.out.println(multiset.count(2));//2
Multimap是一个KEY多个VALUE
Multimap multimap = ArrayListMultimap.create();
multimap.put("a","1");
multimap.put("a","2");
System.out.println(multimap.get("a"));
BiMap,可根据key找到value,也可以根据value找到key,但key可以重复,但value不能重复
BiMap biMap = HashBiMap.create();
biMap.put("a",1);
biMap.put("b",2);
System.out.println(biMap.inverse().get(1));//a
函数式编程:Functions
函数式编程的好处在于在集合遍历操作中提供自定义Function的操作,比如transform转换。我们再也不需要一遍遍的遍历集合,显著的简化了代码。
List list1 = new ArrayList();
list1.add("hello");
list1.add("hello world");
list1.add("testt");
Function f1 = new Function() {
@Nullable
@Override
public String apply(@Nullable String s) {
return s.toUpperCase();
}
};
Function f2 = new Function() {
@Nullable
@Override
public String apply(@Nullable String s) {
return s.length()<5?s:s.substring(0,5);
}
};
Function f3 = Functions.compose(f1,f2);
Collection transform = Collections2.transform(list1, f3);
transform.stream().forEach(s-> System.out.println(s));
Preconditions
Guava提供了一个PreConditions类来在方法调用前检查看参数是否合适,比如说,是否为null,是否在某个范围等等。