摘要:使用 Java Collectors.joining等方法把List中的所有元素通过指定的分隔符拼接为字符串。

综述

  在项目开发中,经常遇到的一个问题就是要把一个集合转换成字符串,故在今天的分享中,我们将一起学习如何把列表中的所有元素连接成由指定分隔符分隔的字符串。本文使用的列表List如下:

List<Integer> integerList = Stream.of(1, 2, 3, 6, 7, 9).collect(Collectors.toList());

  这种定义List的方式采用的是Java 8 的Stream,所构建的list支持动态扩容。

使用For循环

  基于 for 循环拼接字符串是最常见的一个方法,示例如下:

    /**
* 基于for 循环拼接字符串
*/
public static String forMethod(List<Integer> list, String separator) {
// 校验是否为空
if (list.isEmpty()) {
return "";
}
StringBuilder sb = new StringBuilder();
for (int i = 0, len = list.size(); i < len; i++) {
sb.append(list.get(i)).append(separator);
}
//去掉最后一个分隔符号
return sb.substring(0, sb.length() - 1);
}

StringUtils.join 函数

  使用封装好的类StringUtils时,需要导入相关的包org.apache.commons.lang3.StringUtils,它依赖 jar 包 commons-lang3。

public static String joinMethod(List<Integer> list, String separator) {
return StringUtils.join(list, separator);
}

其源码实现如下:

public static String join(Iterable<?> iterable, String separator) {
return iterable == null ? null : join(iterable.iterator(), separator);
}

  第一个参数iterable表示实现了此接口的集合对象,集合Collection、List、Set都是Iterable的实现类;Iterable接口是Java集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素。

  第二个参数separator表示拼接集合元素的时候使用的分隔符,这样一来就省去很多中间转换的步骤,可以直接得到我们预期的字符串。

Collectors.joining(Function) 函数

  Stream下的Collectors.joining(Function):用于将元素连接之后返回字符串,同样可以自定义分隔符。

public static String joiningMethod(List<Integer> list, String separator) {
return list.stream()
.map(String::valueOf)
.collect(Collectors.joining(separator));
}

  Stream的优秀之处就在于其可以同时处理其它业务逻辑,让代码逻辑更加的原汁原味、一气呵成。如果纯粹是拼接字符串的诉求,确实没有必要使用它,毕竟杀鸡焉用牛刀!但是我们可以在拼接字符串的同时,实现其它功能。让我们通过下面的示例来感受一下使用Stream进行字符串拼接的真正魅力吧!

public static String joiningPlusMethod(List<Integer> list, String separator) {
return list.stream()
.map(String::valueOf)
.collect(Collectors.joining(separator, "[", "]"));
}

功能:结合Stream流操作,在拼接后的字符串前后添加中括号。彰明较著,其它函数无法直接实现这个需求。

Guava Joiner join 函数

  使用 Google Guava 中的 com.google.common.base.Joiner 类拼接成字符串。

public static String guavaJoinMethod(List<Integer> list, String separator) {
return Joiner.on(separator).join(list);
}

  返回一个字符串。该字符串是通过把 list 的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入 separator 字符串而生成的。

String.join 函数

public static String stringJoinMethod(List<String> list, String separator) {
return String.join(separator, list);
}

  该函数只适用于字符串List,返回一个字符串。该字符串是通过把 list 的元素连接起来,在两个元素之间插入 separator 字符串而生成的。

  总的示例如下:

import org.apache.commons.lang3.StringUtils;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import com.google.common.base.Joiner;
public static void main(String[] args) { String separator = "-";
List<Integer> list = initList();
String result = forMethod(list, separator);
System.out.println("----- forMethod -----" + result);
System.out.println("----- joinMethod -----" + joinMethod(list, separator));
System.out.println("----- joiningPlusMethod 添加特殊符号-----" + joiningPlusMethod(list, delimiter)); System.out.println("----- streamMapMethod -----" + joiningMethod(list, separator));
System.out.println("----- guavaJoinMethod -----" + guavaJoinMethod(list, separator)); }

  执行后,控制台打印结果如下:

----- forMethod -----1-2-3-6-7-9
----- joinMethod -----1-2-3-6-7-9
----- streamMapMethod -----1-2-3-6-7-9
----- joiningPlusMethod 添加特殊符号-----[1-2-3-6-7-9]
----- guavaJoinMethod -----1-2-3-6-7-9

结束语

  大家如果对于本文介绍的内容有不理解的地方,请在评论区留言。如果碰到【相关】问题也可以在评论区留言,和诸位互动交流。三人行必有我师,一起进步。大家可随意尽情享用本文啦!

Java 把列表元素拼接字符串的更多相关文章

  1. Java使用占位符拼接字符串

    大家知道,在C#编程中,可以用占位符来拼接字符串,用起来非常的方便. 特别是需要进行大量的参数拼接的时候,比如: Console.WriteLine(String.Format("该域名{0 ...

  2. Java使用占位符拼接字符串-String.format()的使用

    String domain = "www.ykmaiz.com"; int iVisit = 0; String info = String.format("该域名%s被 ...

  3. Python 拼接字符串的几种方式

    在学习Python(3x)的过程中,在拼接字符串的时候遇到了些问题,所以抽点时间整理一下Python 拼接字符串的几种方式. 方式1,使用加号(+)连接,使用加号连接各个变量或者元素必须是字符串类型( ...

  4. Python 将一个列表里面的元素拼接成一个字符串

    item1 = ["lowman", "isbusy"] item2 = ",".join(item1) # 根据实际需要使用相应的分隔符连 ...

  5. 为什么 Java 8 中不再需要 StringBuilder 拼接字符串

    为什么 Java 8 中不再需要 StringBuilder 拼接字符串 来源:codeceo 发布时间:2016-12-27 阅读次数:427 0   在Java开发者中,字符串的拼接占用资源高往往 ...

  6. Java实现微信菜单json字符串拼接

    Java实现微信菜单json字符串拼接 微信菜单拼接json字符串方法 >>>>>>>>>>>>>>>> ...

  7. Java循环中删除一个列表元素

    本文主要想讲述一下我对之前看到一篇文章的说法.假设跟你的想法有出入,欢迎留言.一起讨论. #3. 在循环中删除一个列表元素 考虑以下的代码.迭代过程中删除元素: ArrayList<String ...

  8. java以逗号为分割符拼接字符串的技巧

    java以逗号为分割符拼接字符串的技巧   答: 不用那么多if判断,让人思维混乱,直接到最后使用deleteCharAt方法去除最后一个逗号即可. 实现代码如下所示: StringBuffer sb ...

  9. Java 在使用@Select遇到的问题:拼接字符串将数组拼为了字符串

    Java再用@Select拼接sql语句时候, #{参数名}:是加引号的 ${参数名}:是不加引号的 例如: userIds为List或者数组,值为1,2,3,4,5 1.@Select(" ...

  10. java拼接字符串用StringBuilder

    StringBuilder builder = new StringBuilder(); String s1="abc"; for(int i=0;i<10000000;i+ ...

随机推荐

  1. mac 如何开启指定端口供外部访问?

    前言 需要 mac 上开放指定端口,指定 ip 访问 解决 在 macOS 上开放一个端口,并指定只能特定的 IP 访问,可以使用 macOS 内置的 pfctl(Packet Filter)工具来实 ...

  2. phpstorm、goland常用快捷键

    1) 文件操作相关的快捷键 快捷键 作用 Ctrl + E 打开最近浏览过的文件 Ctrl + N 快速打开某个 struct 结构体所在的文件 Ctrl + Shift + N 快速打开文件 Shi ...

  3. Flask快速入门4-蓝图

    十六,Flask 用蓝图实现模块化的应用 1,Flask 为什么使用蓝图? Flask 中的蓝图为这些情况设计: 把一个应用分解为一个蓝图的集合.这对大型应用是理想的.一个项目可以实例化 一个应用对象 ...

  4. CentOS 版本选择DVD、Everything、LiveCD、Minimal、NetInstall

    CentOS 7.X,主要是下载的时候有很多版本供选择,如何选择? DVD版:这个是常用版本,就是普通安装版了,推荐大家安装.里面包含大量的常用软件,大部分情况下安装时无需再在线下载,体积为4G.Ev ...

  5. ShardingSphere分组聚合,数据异常问题

    在使用ShardingSphere分组聚合时是,出现了数据汇总不正确问题.我这里只进行了分表,未进行分库.使用的是广播查询,因为是定时任务统计,无法使用到分片键.进行分组的字段是两个 1. SQL查询 ...

  6. 【JDBC第8章】数据库连接池

    第8章:数据库连接池 8.1 JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接 进行sql操作 ...

  7. MySQL 索引的最左前缀匹配原则是什么?

    MySQL 索引的最左前缀匹配原则 最左前缀匹配原则是 MySQL 使用联合索引时的一个重要优化规则.它指的是在查询条件中,只有符合索引最左侧字段开始的连续前缀部分时,索引才能被有效利用. 1. 最左 ...

  8. php版10大设计模式,软件工程必须掌握的姿势

    作为一个半路出家的php萌新,在看公司老大们的代码时无时无刻不在感叹,老大就是老大,写的代码低耦合.易扩展,我怎么就想不出这写完美的实现方式,最近看了韩大佬的视频后才明白,原来这些都是业界前辈们总结提 ...

  9. doctrine-orm基础(单用doctrine避坑指南)

    附: doctrine基础(一):https://www.jianshu.com/p/3681e1add282 doctrine官网: https://www.doctrine-project.org ...

  10. 【题解】洛谷P731[NOI1999] 生日蛋糕+数据加强版

    前言:阅读理解+剪枝+头脑风暴 Designed By FrankWkd 遵循GNU GPL2.0开源协议. 该代码可以通过T148457 生日蛋糕加强版 和 P1731 [NOI1999] 生日蛋糕 ...