Java公共库 —— Guava

本文最后更新于:2021年9月28日 晚上

概览:Guava字符串相关

预警!仅用于本人快速自学,不过欢迎指正。

Guava Strings

  • Strings.isNullOrEmpty(str):判断是否是null或者为空串
  • Strings.nullToEmpty(str):将一个null转换成空串
  • commonPrefix(a,b):比较两个字符串的公共前缀
  • commonSuffix(a,b):比较获取两个字符串的公共后缀
  • padStart(str,len,’’):将字符加到str前面,最终长度扩展为len。
  • padEnd(str,len,’’):添加到后面
  • repeat(str,times):重复str,times次数

Guava Ints

  • Ints.compare(a,b):比较两个int型的大小,a>b返回1,等于返回0.
  • Ints.contains(int[],a):判断数组中包不包含数字a
  • max min 求最大值、最小值
  • Ints.asList():可将数组转换为一个List类型。
    • 而JDK中的Arrays.asList()则可能会出错,并且返回的List内部是一个数组。
    • Ints.asList()最终返回的是一个不可变的list,没有重写add方法,所以不能有add(a)的操作,否则会抛出异常。

Guava Joiner

  • 提供了简单的操作能将列表或者数组的元素使用某些固定的分隔符串接
  • 默认是不支持列表中有null的,最好使用skipNulls()方法过滤掉。
  • 或者使用useForNulls()方法将null替换掉
1
2
3
4
5
6
7
8
9
List<Integer> l = Lists.newArrayList(1,2,3);
System.out.println(Joiner.on('|').join(l)); // 1|2|3

List<String> strings = Lists.newArrayList("1","3","5",null);
System.out.println(Joiner.on("(-_-)").skipNulls().join(strings));
// 1(-_-)3(-_-)5

System.out.println(Joiner.on("(-_-)").useForNull("9").join(strings));
// 1(-_-)3(-_-)5(-_-)9
  • 也支持Map的Joiner操作

    1
    2
    3
    4
    5
    6
    7
    String host = "www.baidu.com";
    Map<String,String> param = Maps.newHashMap();
    param.put("name","cc");
    param.put("id","123");

    String query = Joiner.on("&").withKeyValueSeparator("=").join(param);
    System.out.println(host + "?" + query);// www.baidu.com?name=cc&id=123

    Guava spliter

  • JDK的split方法不会保留最后一个元素分割之后的那个null。

  • Guava的spliter可以自由的保留或者过滤Null。

  • 还可以解析出map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
String str = ", a, b ,";
String result[] = str.split("[,]");
System.out.println(Arrays.toString(result)); // [, a, b ]

List<String> guavaList = Splitter.on(",").splitToList(str);
System.out.println(guavaList); // [, a, b , ]
for(String s : guavaList){
System.out.print(s.length() + " "); // 0 2 3 0
}
System.out.println();

// 去除空格
List<String> guavaList1 = Splitter.on(",").trimResults().splitToList(str);
System.out.println(guavaList1); // [, a, b, ]
for(String s : guavaList1){
System.out.print(s.length() + " "); // 0 1 1 0
}

// 过滤null
List<String> guavaList2 = Splitter.on(",").trimResults()
.omitEmptyStrings().splitToList(str);
System.out.println(guavaList2); // [a, b]

// 提取map
String queryStr = "a=1&b=2";
Map<String,String> maps = Splitter.on("&").withKeyValueSeparator("=").split(queryStr);
System.out.println(maps); // {a=1, b=2}

Guava Objects

  • equal:可以比较两个为空的值
  • hashCode:接受可变参数个参数
  • MoreObjects.firstNonNull:
  • JacksonSUpport.toJson():方法

Guava CharMatcher

1
2
3
4
5
6
7
8
9
10
String str = "1234abcd";
String str1 = "1a2b3c4d";
CharMatcher charMatcher = CharMatcher.anyOf("abcd");
System.out.println(str + " -- " + charMatcher.retainFrom(str)); // 1234abcd -- abcd
System.out.println(str1 + " -- " + charMatcher.retainFrom(str1));// 1a2b3c4d -- abcd
System.out.println(str + " -- " + charMatcher.removeFrom(str));// 1234abcd -- 1234
System.out.println(str1 + " -- " + charMatcher.removeFrom(str));// 1a2b3c4d -- 1234

CharMatcher charMatcher1 = CharMatcher.anyOf("abcd").or(CharMatcher.is('2'));
System.out.println(str + " -- " + charMatcher1.retainFrom(str)); // 1234abcd -- 2abcd

Guava Preconditions

1
Preconditions.checkNotNull(ret,"ret不能为空");

Guava Optional

用法1:

  • 作为方法的返回值,显式告知调用方法可能为不存在。
  • Optional process();//调用方将明确知道返回值可能不存在

用法2:

  • 设置默认值
  • Integer a = Optional.fromNullable(b).or(0);//如果b为null就将a设置为默认值

Predicate

  • 函数式接口,用于判断是否满足条件,常用于过滤
1
2
1 String中的intern方法有什么作用? 
2 对比一下Guava的Interners。

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!