首页 > Java, 挨踢(IT), 日拱一卒 > Guava 小技巧三则

Guava 小技巧三则

2016年2月26日 发表评论 阅读评论 1,664 人阅读    

最近在赶一个项目,由于D瓜哥也算是半个 Google 粉。所以,对 Google 出品的 Guava 项目可以说情有独钟。最近使用使用中遇到三个问题以及使用 Guava 的解决办法,D瓜哥觉得挺有代表性的。所以简单记录一下。

Map 相关的 JoinerSplitter

第一个问题:D瓜哥需要从 URL 中获取相关请求的参数,并且将其转化成 Key-Value 形式放到 Map对象,方便后续操作。

URL 中,参数的格式大家应该都了解:http://www.diguage.com?userName=diguage&sex=fale。以 ? 分割后,后面的就是参数。如果自己手动写,还有一个一个分割,实在是懒得动手了。其实 Guava中内置了非常方便的方法来解决这个问题。代码如下:

int paramSeparater = url.indexOf("?");
String host = url.substring(0, paramSeparater);
String params = fromUrl.substring(paramSeparater + 1);
Map<String, String> paramMap = Maps.newHashMap();
Map<String, String> paramMap = Splitter.on("&").withKeyValueSeparator("=").split(params);

反过来,我们可能还需有将 Map 对象转化成 URL 的参数,来拼接出一个带参数的 URL。Guava 中也有非常方便的相关方法。代码如下:

Map<String, String> paramMap = Maps.newHashMap();
paramMap.put("userName", "diguage");
paramMap.put("webSite", "http://www.diguage.com/");
String url = url + "?" + Joiner.on("&").withKeyValueSeparator("=").join(paramMap);

感觉怎么样,是不是特别方便?

字符串格式转换

我们的项目中,使用了 Spring JdbcTemplate,并基于这个这个东东写了一个 BaseDao,再结合注解,就可以获取表名和字段名。为了统一,规定将数据表以及字段的多个字母以下划线分割。大家都知道,Java 中类名以及属性名,都是驼峰命名法。那么就需要一个转化。 Guava 也提供了很方便的方法。代码如下:

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++ 常量的命名规则。

组合使用这几个规则,可以方便地进行字符串形式的转换。例如,将上面的表名转化成类名:

String className = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, tableName);

URL 编码

最后一个问题:需要将一个当前 URL 传递到下一个请求中,方便做跳转回来。作为参数传递,肯定需要对 URL 编码,否则作为参数的 URL 的参数就可能丢失了。 Guava 中通过也可以很好的支持:

String currentUrl = UrlEscapers.urlFormParameterEscaper().escape("http://www.diguage.com?userName=diguage");

最后,再吐嘈一下 Guava: Guava 提供了很好支持 URL 的编码;但是,却没有提供 URL 的解码工具类。这不能不说是美中不足啊。

参考资料

  1. Convert java Map to custom key=value string – Stack Overflow



作 者: D瓜哥,https://www.diguage.com/
原文链接:https://wordpress.diguage.com/archives/143.html
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

分类: Java, 挨踢(IT), 日拱一卒 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.