Guava 小技巧三则
最近在赶一个项目,由于D瓜哥也算是半个 Google 粉。所以,对 Google 出品的 Guava 项目可以说情有独钟。最近使用使用中遇到三个问题以及使用 Guava 的解决办法,D瓜哥觉得挺有代表性的。所以简单记录一下。
Map 相关的 Joiner 和 Splitter
第一个问题:D瓜哥需要从 URL 中获取相关请求的参数,并且将其转化成 Key-Value 形式放到 Map对象,方便后续操作。
URL 中,参数的格式大家应该都了解:http://www.diguage.com?userName=diguage&sex=fale。以 ? 分割后,后面的就是参数。如果自己手动写,还有一个一个分割,实在是懒得动手了。其实 Guava中内置了非常方便的方法来解决这个问题。代码如下:
1 | int paramSeparater = url.indexOf("?"); | 
2 | String host = url.substring(0, paramSeparater); | 
3 | String params = fromUrl.substring(paramSeparater + 1); | 
4 | Map<String, String> paramMap = Maps.newHashMap(); | 
5 | Map<String, String> paramMap = Splitter.on("&").withKeyValueSeparator("=").split(params); | 
反过来,我们可能还需有将 Map 对象转化成 URL 的参数,来拼接出一个带参数的 URL。Guava 中也有非常方便的相关方法。代码如下:
1 | Map<String, String> paramMap = Maps.newHashMap(); | 
2 | paramMap.put("userName", "diguage"); | 
3 | paramMap.put("webSite", "http://www.diguage.com/"); | 
4 | String url = url + "?" + Joiner.on("&").withKeyValueSeparator("=").join(paramMap); | 
感觉怎么样,是不是特别方便?
字符串格式转换
我们的项目中,使用了 Spring JdbcTemplate,并基于这个这个东东写了一个 BaseDao,再结合注解,就可以获取表名和字段名。为了统一,规定将数据表以及字段的多个字母以下划线分割。大家都知道,Java 中类名以及属性名,都是驼峰命名法。那么就需要一个转化。 Guava 也提供了很方便的方法。代码如下:
1 | String tableName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, clazz.getSimpleName()); | 
在上述代码中, CaseFormat 中设定了几个常用的格式:
- 
LOWER_CAMEL– 以小写字母开头的驼峰命名规则。例如:lowerCamel。这个规则符合表示 Java 属性以及 Java 方法的命名规则。 - 
LOWER_HYPHEN– 将单词的小写形式以连接符(-)连接的。例如:lower-hyphen。 - 
LOWER_UNDERSCORE– 将单词的小写形式以连接符(_)连接的。例如:lower_underscore。 - 
UPPER_CAMEL– 以大写字母开头的驼峰命名规则。例如:UpperCamel。这个规则符合表示 Java 或 C++ 类名的命名规则。 - 
UPPER_UNDERSCORE– 将单词的大写形式以连接符(_)连接的。例如:UPPER_UNDERSCORE。这个规则符合表示 Java 或 C++ 常量的命名规则。 
组合使用这几个规则,可以方便地进行字符串形式的转换。例如,将上面的表名转化成类名:
1 | String className = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, tableName); | 
URL 编码
最后一个问题:需要将一个当前 URL 传递到下一个请求中,方便做跳转回来。作为参数传递,肯定需要对 URL 编码,否则作为参数的 URL 的参数就可能丢失了。 Guava 中通过也可以很好的支持:
1 | String currentUrl = UrlEscapers.urlFormParameterEscaper().escape("http://www.diguage.com?userName=diguage"); | 
最后,再吐嘈一下 Guava: Guava 提供了很好支持 URL 的编码;但是,却没有提供 URL 的解码工具类。这不能不说是美中不足啊。
参考资料
原文链接:https://wordpress.diguage.com/archives/143.html
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
