打开支付宝首页搜“523966799”领红包,领到大红包的小伙伴赶紧使用哦!

 找回密码
 立即注册

QQ登录

只需一步,快速开始

Google Guava学习笔记——基础工具类Joiner的使用

2023-9-6 15:24| 发布者: zhaojun917| 查看: 198| 评论: 0

摘要: 最近阿里发布的 Java开发手册中强制线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。其中ThreadFactoryBuilder需 ...
最近阿里发布的 Java开发手册中强制线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
其中ThreadFactoryBuilder需要用到google提供的guava包

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
  Guava 中有一些基础的工具类,如下所列:

  1,Joiner 类:根据给定的分隔符把字符串连接到一起。MapJoiner 执行相同的操作,但是针对 Map 的 key 和 value。

  2,Splitter 类:与 Joiner 操作相反的类,是根据给定的分隔符,把一个字符串分隔成若个子字符串。

  3,CharMatcher,Strings 类:对字符串通用的操作,例如移除字符串的某一部分,字符串匹配等等操作。

  4,其他类:针对Object操作的方法,例如 toString 和 hashCode 方法等。

 

  使用 Joiner 类

  我们通常根据指定的分隔符来连接字符串是这样做的。

复制代码
 1 public String buildString(List<String> stringList, String delimiter){
 2         StringBuilder builder = new StringBuilder();
 3         for (String s : stringList) {
 4              if(s != null){
 5                   builder.append(s).append(delimiter);
 6             }
 7         }
 8         builder.setLength(builder.length() – delimiter.length());
 9         return builder.toString();
10 }
复制代码

  上面的代码注意的一点就是我们要移除字符串最后的一个分隔符。虽然不难,但是很无聊,下面用 Joiner 类来实现同样的功能:

    

Joiner.on("|").skipNulls().join(stringList); // 默认使用“|”作为分隔符

  是不是很简洁,如果你想替换为 null 的字符串,使用下面的方法:

Joiner.on("|").useForNull("no value").join(stringList);

  需要注意的是,Joiner 不仅可以操作字符串,还可以是数组,迭代器,可变参数。Joiner 类是不可变类,因此是线程安全的,它可以处理 static final 的变量,考虑到这一点,我们看下面的代码:

 Joiner stringJoiner = Joiner.on("|").skipNulls();
 //the useForNull() method returns a new instance of the Joiner!
 stringJoiner.useForNull("missing");
 stringJoiner.join("foo","bar",null);

  在上面的代码中,useForNull()方法没有起作用,null值还是被忽略了。

  Joiner 不仅可以返回string ,还有方法能够处理StringBuilder类:

StringBuilder stringBuilder = new StringBuilder();
Joiner joiner = Joiner.on("|").skipNulls();
//returns the StringBuilder instance with the values foo,bar,baz appeneded with "|" delimiters
joiner.appendTo(stringBuilder,"foo","bar","baz");

  只要是实现了 Appendble 接口的类都可以用 Joiner 来处理。

FileWriter fileWriter = new FileWriter(new File("path")):
List<Date> dateList = getDates();
Joiner joiner = Joiner.on("#").useForNulls(" ");
//returns the FileWriter instance with the values appended into it
joiner.appendTo(fileWriter,dateList);

  上面的例子中,我们传递了 FileWriter 实例 和 Data 对象给 Joiner,Joiner 将连接list中所有的数据给 FileWriter 实例并返回。

  如上所示,Joiner 是一个非常有用的类,很容易处理日常的一些任务。还有一个特殊的方法,它和 Joiner 的工作方式是一样,但是它连接的是根据指定的分隔符连接 Map 的 key 和 value。

mapJoiner = Joiner.on("#").withKeyValueSeparator("=");

  下面的单元测试类展示了如何连接 Map 的 key-value。

复制代码
Map<String, String> 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);

    System.out.println(returnedString);
复制代码

  运行结果:Washington D.C=Redskins#New York City=Giants#Philadelphia=Eagles#Dallas=Cowboys

关闭

站长推荐上一条 /7 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )

GMT+8, 2024-9-20 21:23 , Processed in 0.024749 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部