您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

详解Java8中的StringJoiner使用

时间:2022-12-02 16:37:03  来源:今日头条  作者:架构师面试宝典

面试题

在之前的内容中我们介绍了字符串。同时,也介绍了字符串的拼接操作,并且分析了几种字符串拼接方式的原理。其实在JAVA8中还提供了一种新的字符串操作方式。就是今天我们要来深入讨论的stringJoiner。

import java.util.StringJoiner;public class Test {public static void mAIn(String[] args) {StringJoiner joiner;

与其他的字符串操作不同的是,这个类的包是来自于java.util.StringJoiner,通过IDEA分析可以看到在这个类中提供了如下的一些方法操作。根据惯例来自于java.util包下的内容一般可以理解为一个工具类。这也就是为什么这个类与其他字符串类型不同的原因。


 


用法讲解

首先我们先来创建一个测试类,通过测试类的操作来讲解这个StringJoiner的用法,代码如下。


public class Test {public static void main(String[] args) {StringJoiner stringJoiner = new StringJoiner("Hello");stringJoiner.add("World");stringJoiner.add("架构师面试");System.out.println(stringJoiner.toString());StringJoiner stringJoiner1 = new StringJoiner(":","[","]");stringJoiner1.add("Hello").add("World").add("字符串操作");System.out.println(stringJoiner1.toString());

运行结果如下


 

结合上面的内容,可以知道,在StringJoiner类中提供了两个构造函数,有5个公有的方法,而其中使用最多的方法就是add方法和toString方法。下面我们就来看看add方法的实现原理。

add原理

add()方法源码如下

public StringJoiner add(CharSequence newElement) {prepareBuilder().Append(newElement);return this;private StringBuilder prepareBuilder() {if (value != null) {value.append(delimiter);} else {value = new StringBuilder().append(prefix);return value;

会看到这里使用的也是StringBuilder来进行字符串操作。分析源码可以知道,其实使用StringJoiner和直接使用StringBuilder是一样的。那么为什么还要多此一举地实现开发这样一个类操作呢?

StringJoiner分析

如果在实际开发中遇到这样一个操作,我们要将一个数组中的所有对象拼接成一个大的字符串对象,那么我们应该如何去操作呢?

结合之前的分析,我们可以循环数组对象,并且使用StringBuilder进行拼接。

StringBuilder builder = new StringBuilder();if (!list.isEmpty()) {builder.append(list.get(0));for (int i = 1, n = list.size(); i < n; i++) {builder.append(",").append(list.get(i));builder.toString();

当然我们还可以使用Java8中提供lambda表达式来进行操作。代码如下。其实操作和循环操作实现的方式是一样的。

list.stream().reduce(new StringBuilder(), (sb, s) -> sb.append(s).append(','), StringBuilder::append).toString();

还可以使用我们最不推荐的方式在循环中使用+的方式来进行拼接。

这些操作都可以完成上面的内容,但是由于涉及到循环,所以说整体的效率都不是太高。

为了提升操作效率StringJoiner类就出现了。首先我们来分析一个类Collectors,java.util.stream.Collectors实现各种有用的缩减操作的Collector的实现,例如将元素累积到集合中,根据各种标准汇总元素等。通过这个类中的joining()方法代码如下。

public static Collector joining() {return new CollectorImpl(StringBuilder::new, StringBuilder::append,(r1, r2) -> { r1.append(r2); return r1; },StringBuilder::toString, CH_NOID);public static Collector joining(CharSequence delimiter,CharSequence prefix,CharSequence suffix) {return new CollectorImpl<>(() -> new StringJoiner(delimiter, prefix, suffix),StringJoiner::add, StringJoiner::merge,StringJoiner::toString, CH_NOID);

将这个方法与stream()方法进行结合,也就是在Java8中提供的一些高级用法。

list.stream().collect(Collectors.joining(":"))

会发现在joining()方法中不但使用了StringBuilder还使用了StringJoiner。最终的效果都是实现高效。

总结

这篇文章主要介绍了Java8中对于字符串操作的一些高级用法,但是尽管是高级用法也只是以提升开发效率为目的,这些高级用法都可以使用基本用法来代替,只是在日常的开发中为了提升开发效率。我们会采用一些高级用法,但是想要理解这些高级用法还要基础知识做支持,希望大家多多关注,后续会为大家带来更多的干货内容。



Tags:Java8   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Java8的LocalDateTime还没搞懂?一文轻松解决掉你的烦恼
哈喽,大家好,我是了不起。LocalDateTime 是Java8中新加入的日期时间类,现在都 Java20 了,不会还有人没用过 LocalDateTime 吧?今天给大家演示一下 LocalDateTime 的常用方法。前...【详细内容】
2023-04-06  Search: Java8  点击:(365)  评论:(0)  加入收藏
macOS版Java8开发环境搭建(基于Intel x86 64-bit)
日常办公和软件开发除了可以使用Windows系统以外,还可以使用macOS系统,至于具体使用什么系统取决于你入职公司之后公司给你发的什么电脑,如果是MacBookPro那么就使用macOS开...【详细内容】
2022-12-23  Search: Java8  点击:(314)  评论:(0)  加入收藏
详解Java8中的StringJoiner使用
面试题在之前的内容中我们介绍了字符串。同时,也介绍了字符串的拼接操作,并且分析了几种字符串拼接方式的原理。其实在java8中还提供了一种新的字符串操作方式。就是今天我们...【详细内容】
2022-12-02  Search: Java8  点击:(426)  评论:(0)  加入收藏
详解java5、java6、java7、java8、java9新特性
1. 介绍JAVA作为使用的主力语言,掌握下其历史发展也是有必要的。看看从JAVA5开始到现在的JAVA9有哪些变化。借此机会,也可以看看哪些特性我们是已经用到的,哪些是还没有用到的...【详细内容】
2022-07-30  Search: Java8  点击:(632)  评论:(0)  加入收藏
Java8特性之Optional:如何干掉空指针?
Optional的作用是什么?他都有哪些方法?阿里规范点名说尽量用Optional来避免空指针,那么什么场景用Optional?本篇文章围绕这三点来进行讲解。目录 一、Optional类的来源 二、Opt...【详细内容】
2022-06-27  Search: Java8  点击:(234)  评论:(0)  加入收藏
高效遍历数据,试试 Java8 中的 ParallelStream 并行流?
ParallelStream并行流在之前文章Java8新特性-Stream API中有简单的介绍过它的使用。如Collection集合可以通过parallelStream()的得到一个并行流。Stream<Integer> stream =...【详细内容】
2022-05-09  Search: Java8  点击:(414)  评论:(0)  加入收藏
java8中自带常用的函数式接口
public class LambdaDemo { public static void main(String[] args) { /** * 用来判定true或者false boolean test(T t); */ Predicat...【详细内容】
2021-10-18  Search: Java8  点击:(411)  评论:(0)  加入收藏
使用 IDEA 解决 Java8 的数据流问题,用过的都说好
IDEA在手 天下我有我们打算将Pondus的所有生产服务器升级到这一新版本。 从那时起,我们将大部分代码库迁移到lambda表达式、数据流和新的日期API上。 我们也会使用Nashorn来...【详细内容】
2021-06-10  Search: Java8  点击:(494)  评论:(0)  加入收藏
放弃 StringBuilder!Java8的StringJoiner,真香
为什么会新增这样一个string辅助类?原有的stringbuilder太死板,不支持分割,如果想让最终的字符串以逗号隔开,需要这样写StringBuilder sb = new StringBuilder();IntStream.ran...【详细内容】
2021-05-17  Search: Java8  点击:(413)  评论:(0)  加入收藏
玩转Java8 lambda表达式&函数式接口一
Lambda表达式简介Lambda表达式是java 1.8才开始有的重要功能,使用Lambda表达式可以替代匿名内部类,代码简洁易懂,提升工作效率。上代码:使用内部类和使用lambda实现代码量对比函...【详细内容】
2021-03-15  Search: Java8  点击:(712)  评论:(0)  加入收藏
▌简易百科推荐
Java 8 内存管理原理解析及内存故障排查实践
本文介绍Java8虚拟机的内存区域划分、内存垃圾回收工作原理解析、虚拟机内存分配配置,以及各垃圾收集器优缺点及场景应用、实践内存故障场景排查诊断,方便读者面临内存故障时...【详细内容】
2024-03-20  vivo互联网技术    Tags:Java 8   点击:(15)  评论:(0)  加入收藏
如何编写高性能的Java代码
作者 | 波哥审校 | 重楼在当今软件开发领域,编写高性能的Java代码是至关重要的。Java作为一种流行的编程语言,拥有强大的生态系统和丰富的工具链,但是要写出性能优异的Java代码...【详细内容】
2024-03-20    51CTO  Tags:Java代码   点击:(24)  评论:(0)  加入收藏
在Java应用程序中释放峰值性能:配置文件引导优化(PGO)概述
译者 | 李睿审校 | 重楼在Java开发领域,优化应用程序的性能是开发人员的持续追求。配置文件引导优化(Profile-Guided Optimization,PGO)是一种功能强大的技术,能够显著地提高Ja...【详细内容】
2024-03-18    51CTO  Tags:Java   点击:(27)  评论:(0)  加入收藏
Java生产环境下性能监控与调优详解
堆是 JVM 内存中最大的一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中。堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和 Survivor 区,...【详细内容】
2024-02-04  大雷家吃饭    Tags:Java   点击:(57)  评论:(0)  加入收藏
在项目中如何避免和解决Java内存泄漏问题
在Java中,内存泄漏通常指的是程序中存在一些不再使用的对象或数据结构仍然保持对内存的引用,从而导致这些对象无法被垃圾回收器回收,最终导致内存占用不断增加,进而影响程序的性...【详细内容】
2024-02-01  编程技术汇  今日头条  Tags:Java   点击:(70)  评论:(0)  加入收藏
Java中的缓存技术及其使用场景
Java中的缓存技术是一种优化手段,用于提高应用程序的性能和响应速度。缓存技术通过将计算结果或者经常访问的数据存储在快速访问的存储介质中,以便下次需要时可以更快地获取。...【详细内容】
2024-01-30  编程技术汇    Tags:Java   点击:(73)  评论:(0)  加入收藏
JDK17 与 JDK11 特性差异浅谈
从 JDK11 到 JDK17 ,Java 的发展经历了一系列重要的里程碑。其中最重要的是 JDK17 的发布,这是一个长期支持(LTS)版本,它将获得长期的更新和支持,有助于保持程序的稳定性和可靠性...【详细内容】
2024-01-26  政采云技术  51CTO  Tags:JDK17   点击:(90)  评论:(0)  加入收藏
Java并发编程高阶技术
随着计算机硬件的发展,多核处理器的普及和内存容量的增加,利用多线程实现异步并发成为提升程序性能的重要途径。在Java中,多线程的使用能够更好地发挥硬件资源,提高程序的响应...【详细内容】
2024-01-19  大雷家吃饭    Tags:Java   点击:(107)  评论:(0)  加入收藏
这篇文章彻底让你了解Java与RPA
前段时间更新系统的时候,发现多了一个名为Power Automate的应用,打开了解后发现是一个自动化应用,根据其描述,可以自动执行所有日常任务,说的还是比较夸张,简单用了下,对于office、...【详细内容】
2024-01-17  Java技术指北  微信公众号  Tags:Java   点击:(99)  评论:(0)  加入收藏
Java 在 2023 年仍然流行的 25 个原因
译者 | 刘汪洋审校 | 重楼学习 Java 的过程中,我意识到在 90 年代末 OOP 正值鼎盛时期,Java 作为能够真正实现这些概念的语言显得尤为突出(尽管我此前学过 C++,但相比 Java 影响...【详细内容】
2024-01-10  刘汪洋  51CTO  Tags:Java   点击:(78)  评论:(0)  加入收藏
站内最新
站内热门
站内头条