最近阿里发布的 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 |
|手机版|小黑屋|梦想之都-俊月星空 ( 粤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.