摘要:使用 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. ABC393C题解

    大概评级:橙. 送分题. 题意就是让你统计有多少条边是重边或自环. 设 \(u_i\) 表示第 \(i\) 条边的左端点,\(v_i\) 表示第 \(i\) 条边的右端点. 那么如果 \(u_i = ...

  2. thinkphp6实现仿微信朋友圈,用户可发布图片和文字内容,用户可评论,其他用户可评论文章,也可回复用户评论,多层级评论,无限级评论

    功能:仿微信朋友圈,用户可发布图片和文字内容,用户可评论,其他用户可评论文章,也可回复用户评论,多层级评论,无限级评论数据库示例:朋友圈内容表 article表:id content image li ...

  3. 码云git笔记

    以后要日常使用这个东西,所以今天又学习了下,具体链接如下: 码云帮助中心https://gitee.com/help/articles/4122 先记录一点简单的入门东西: Git 全局设置: git ...

  4. nuxt,从开发到线上部署

    起因: 前段时间,同组小伙伴使用vue做了一个小后台,使一位后端沉寂多年得求道之心又躁动了起来...然后,当我和这个躁动起来得后端要合作重构一个网站得时候,后端小哥哥说,就知道套页面,套页面,不用新技 ...

  5. 依赖注入(DI)与控制反转(IoC)

    .wj_nav { display: inline-block; width: 100%; margin-bottom: 0.375rem } .wj_nav span { display: inli ...

  6. gorm中使用乐观锁

    乐观锁简介 乐观锁(又称乐观并发控制)是一种常见的数据库并发控制策略. 乐观并发控制多数用于数据竞争(data race)不大.冲突较少的环境中,这种环境中,偶尔回滚事务的成本会低于读取数据时锁定数据 ...

  7. centos7下扩展根分区(图文详解)

    df -h    查看当前系统磁盘使用状况 fdisk -l    可以看见,我新添加了一块硬盘,大小为10G,新磁盘/dev/sdb fdisk /dev/sdb    对新的磁盘进行分区 在交互模 ...

  8. [WPF] 在RichTextBox中输出Microsoft.Extension.Logging库的日志消息

    背景 微软的日志库一般是输出到控制台的,但是在WPF中并不能直接使用控制台,需要AllocConsole. 但是这种做法个人觉得不太安全(一关闭控制台整个程序就退出了?).这时候就需要一个更加友好的方 ...

  9. php文件和文件夹操作类

    文件和文件夹操作 移动 | 复制 | 删除 | 重命名 | 下载 <?php namespace Framework\Tools; use PharData; class FileManager ...

  10. Go初入武林之乘法表

    为统一管理源码, 请到gitee中查看. GoTimesTable