从一行代码到Guava Joiner


声明:本文转载自https://my.oschina.net/qixiaobo025/blog/1574486,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

背景

代码中的到处散乱着如下的代码

开发到处拷贝粘贴导致,事实上某些情况下开发还需要处理最后一个分隔符

解决方案

StringBuilder

Sonar给出的方案

 

The method seems to be building a String using concatenation in a loop. In each iteration, the String is converted to a StringBuffer/StringBuilder, appended to, and converted back to a String. This can lead to a cost quadratic in the number of iterations, as the growing string is recopied in each iteration.

Better performance can be obtained by using a StringBuffer (or StringBuilder in Java 1.5) explicitly.

For example:

// This is bad  String s = "";  for (int i = 0; i < field.length; ++i) {    s = s + field[i];  }    // This is better  StringBuffer buf = new StringBuffer();  for (int i = 0; i < field.length; ++i) {    buf.append(field[i]);  }  String s = buf.toString();

对于栈上私有对象来说应当考虑StringBuilder更好

Joiner

当然我们更好的方法是使用Guava 的Joiner

比如

   List<String> list = Lists.transform(tbRoleOrgList, new Function<TbRoleOrg, String>() {           @Nullable           @Override           public String apply(@Nullable TbRoleOrg input) {               return input == null ? null : input.getOrgId();           }       });       Joiner joiner = Joiner.on(",").skipNulls(); return joiner.join(list);

joiner 提供了比较多的api

当然还有MapJoiner也是很常用的工具类

Joiner.MapJoiner mapJoiner = Joiner.on("&").withKeyValueSeparator("="); return  mapJoiner.join(errorMap);

十分方便【更重要的是Joiner和MapJoiner是线程安全的~】

某些拼接URL的场景十分合用!

本文发表于2017年11月16日 16:33
(c)注:本文转载自https://my.oschina.net/qixiaobo025/blog/1574486,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2063 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1