guava之Joiner 和 Splitter(转)

简介: 最近在给客户准备一个Guava的分享,所以会陆续的更新关于Guava更多的细节分享。本文将记录Guava中得字符串处理Joiner(连接)和Splitter(分割)处理。 Joiner 首先我们来看看下面我们经常遇见的一个案例: 题目: 对于一个如下定义List List list = new ArrayList("1", "2", null, “3”); 按照’,’分割,并过滤掉null。

最近在给客户准备一个Guava的分享,所以会陆续的更新关于Guava更多的细节分享。本文将记录Guava中得字符串处理Joiner(连接)和Splitter(分割)处理。

Joiner

首先我们来看看下面我们经常遇见的一个案例:

题目:
对于一个如下定义List

   List<String> list = new ArrayList<String>("1", "2", null, “3”);

按照’,’分割,并过滤掉null。

如果不用第三方库,如common-lange,Guava,用原生java,我们将怎么继续?

1
2
3
4
5
6 7 8 9 10 11 12 13 14 15 
public static String join(List stringList, String delimiter) { StringBuilder builder = new StringBuilder(); for (Object item : stringList) { if (item != null) { builder  .append(item)  .append(delimiter); } } builder.setLength(builder.length() delimiter.length()); return builder.toString();} 

是不是很简单,但是繁琐,而且这里还有个坑,我们使用append的方式,在每次for完成后,我们必须去修正remove最后的分隔符:builder.setLength(builder.length() delimiter.length());

Guava版本呢?

1
2
3
4
5
6 
 public static String joinByGuava(List stringList, String delimiter) { return Joiner  .on(delimiter)  .skipNulls()  .join(stringList);  } 

我们不在考虑更多的细节,并且很有语义的告诉代码的阅读者,用什么分隔符,需要过滤null值再join。

note:当然我们也可以用common-lange来很简单的完成:StringUtils.join(stringList, delimiter).但是个人推荐尽量使用Guava替代common-lange,因为Guava还有更多的有用方法,后续会陆续介绍,还有就是Guava的API相对更有语意一点。

Splitter

MapJoinner和MapSplitter

对于MapJoinner和MapSplitter的最好案例就是url的param编码。

MapJoinner

题目:
生产一个查询id: 123,name: green的学生信息的url。

利用Guava的MapJoinner的代码如下:

1
 Joiner.on("&").withKeyValueSeparator("=").join(ImmutableMap.of("id", "123", "name", "green")); 

这里采用了on传入map item之间分隔符,以及withKeyValueSeparator传递map项key/value之间的分隔符。所以能够很简单的实现,不用我们在去实现一个的for循环代码。

MapSplitter

题目:
对url中的查询字符串"id=123&name=green"进行分割

利用Guava的MapSplitter的代码如下:

1
final Map<String, String> join = Splitter.on("&").withKeyValueSeparator("=").split("id=123&name=green"); 

这里同样利用on传入字符串的第一分隔符,withKeyValueSeparator传入项的分隔符,产生map的key/value项,其结果是一个{id=123, name=green}的Map对象。

 

http://www.cnblogs.com/whitewolf/p/4214749.html

相关文章
|
算法 Java 测试技术
Java实现数据压缩所有方式性能测试
Java实现数据压缩所有方式性能测试
864 0
|
6月前
|
监控 5G 定位技术
高精度时间统一设备构建时间同步基石
西安同步电子科技有限公司推出的SYN012型时统设备,是支撑现代社会运行的高精度时间同步解决方案。设备采用GPS/北斗双模授时,支持IRIG-B、NTP/SNTP、PTP等多协议,具备30ns授时精度和1μs守时精度。广泛应用于电力系统、金融交易、轨道交通、工业自动化等领域,满足亚微秒级同步需求。其模块化设计与冗余备份确保可靠性,全生命周期服务体系提供专业支持。作为国产化替代标杆,该设备定义了时间同步的“中国标准”,为数字经济提供坚实保障。
|
Java Unix Linux
什么是阻塞IO和非阻塞IO
什么是阻塞IO和非阻塞IO
514 3
|
缓存 网络协议 Unix
Linux IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO
IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作。那么我们对与外部设备的操作都可以看做对文件进行操作。我们对一个文件的读写,都通过调用内核提供的系统调用;内核给我们返回一个file descriptor(fd,文件描述符)。
3095 0
|
9月前
|
安全 项目管理
ERP,Enterprise Resource Planning(企业资源计划)
ERP,即Enterprise Resource Planning(企业资源计划),是一种高度集成化的企业管理软件,它整合了物资资源管理(物流)、人力资源管理(人流)、财务资源管理(资金流)以及信息资源管理(信息流)等多个方面。其管理范畴广泛,不仅涵盖了销售、采购、生产、财务、质量等核心业务领域,还强调这些业务之间的协同运作与信息共享。
384 5
|
机器学习/深度学习 存储 算法
【博士每天一篇论文-技术综述】Machine Learning With Echo State Networks 一篇系统讲解ESN知识的五星文章
本文是一篇技术报告,全面介绍了回声状态网络(ESNs)的数学模型、属性、意义、训练方法、深度ESN的发展、应用和局限性,并探讨了未来的研究方向,为理解ESNs在机器学习中的应用提供了系统性的综述。
383 3
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
1346 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
Java Spring
SpringBoot 项目打成 jar 后,如何加载外部的配置文件?
SpringBoot 项目打成 jar 后,如何加载外部的配置文件?
1827 0
|
Web App开发 JavaScript 前端开发
使用 JS 实现在浏览器控制台打印图片 console.image()
在前端开发过程中,调试的时候,我们会使用 console.log 等方式查看数据。但对于图片来说,仅靠展示的数据与结构,是无法想象出图片最终呈现的样子的。 虽然我们可以把图片数据通过 img 标签展示到页面上,或将图片下载下来进行预览。但这样的调试过程实在是复杂,何不实现一个 console.image() 呢?
352 1
使用 JS 实现在浏览器控制台打印图片 console.image()