文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

03、Java 8 - Collectors.joining() 详解

2023-09-10 20:55

关注

本章节我们来详细讲讲 Java 8 流 ( stream ) 收集器 ( Collectors ) 中的 joining() 方法。该方法会返回一个 Collectors 实例,方便在流收集器上的链式操作。

Collectors.joining() 方法以遭遇元素的顺序拼接元素。我们可以传递可选的拼接字符串、前缀和后缀

joinning() 方法定义

假设我们的流中有四个元素 ["A","B","C","D"],那么我们就可以按照以下方式来收集它们

joining()

joinning() 无参数方法会返回一个 Collectors 实例,并且以空字符串 ( "" ) 来拼接收集到的所有元素

JoiningExample.java

package com.ddkk.util.stream;import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public class JoiningExample {    public static void main(String[] args) {       List list = Arrays.asList("A","B","C","D");       String result=  list.stream().collect(Collectors.joining());       System.out.println(result);    }}

输出结果为 ABCD

joining(CharSequence delimiter)

joining(CharSequence delimiter) 接受一个参数字符串序列作为拼接符,并返回一个 Collectors 实例。假如我们传递的拼接符为 "-" 。那么输出结果为 A-B-C-D

JoiningExample.java

package com.ddkk.util.stream;import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public class JoiningExample {    public static void main(String[] args) {       List list = Arrays.asList("A","B","C","D");       String result=  list.stream().collect(Collectors.joining("-"));       System.out.println(result);    }}

运行结果为 A-B-C-D

joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)

joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix) 方法接受一个字符串序列作为拼接符,并在拼接完成后添加传递的前缀和后缀。假如我们传递的分隔符为 "-",前缀为 "[" , 后缀为 "]" 。那么输出结果为 [A-B-C-D]

JoiningExample.java

package com.ddkk.util.stream;import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public class JoiningExample {    public static void main(String[] args) {       List list = Arrays.asList("A","B","C","D");       String result=  list.stream().collect(Collectors.joining("-", "[", "]"));       System.out.println(result);    }}

运行结果为 [A-B-C-D]

范例

范例 1 : 如果流中的数据是字符串

下面的代码演示了如何使用 joinning() 的三种重载方法来拼接字符串

JoiningExampleWithListOfString.java

package com.ddkk.util.stream;import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public class JoiningExampleWithListOfString {    public static void main(String[] args) {        List list = Arrays.asList("Ram","Shyam","Shiv","Mahesh");        String result=  list.stream().collect(Collectors.joining());        System.out.println(result);        result=  list.stream().collect(Collectors.joining(","));        System.out.println(result);                result=  list.stream().collect(Collectors.joining("-","[","]"));        System.out.println(result);            }       } 

运行结果为

RamShyamShivMaheshRam,Shyam,Shiv,Mahesh[Ram-Shyam-Shiv-Mahesh] 

范例 2: 如果流中的数据是对象

如果流中的数据是对象,下面的代码演示了如何拼接它们。

首先,我们创建一个 Person 类

Person.java

package com.ddkk.util.stream;import java.util.ArrayList;import java.util.List;public class Person {    private String name;    private int age;    public Person(String name, int age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public int getAge() {        return age;    }    public static List getList() {        List list = new ArrayList<>();        list.add(new Person("Ram", 23));        list.add(new Person("Shyam", 20));        list.add(new Person("Shiv", 25));        list.add(new Person("Mahesh", 30));        return list;    }} 

然后创建一个 Person 对象流

JoiningExampleWithListOfObject.java

package com.ddkk.util.stream;import java.util.List;import java.util.stream.Collectors;public class JoiningExampleWithListOfObject {    public static void main(String[] args) {        List list = Person.getList();        System.out.println("--Join person name--");        String result=  list.stream().map(p -> p.getName()).collect(Collectors.joining());        System.out.println(result);        result=  list.stream().map(p -> p.getName()).collect(Collectors.joining("|"));        System.out.println(result);        result=  list.stream().map(p -> p.getName()).collect(Collectors.joining("-","[","]"));        System.out.println(result);        System.out.println("--Join person age--");        result=  list.stream().map(p -> String.valueOf(p.getAge())).collect(Collectors.joining());        System.out.println(result);        result=  list.stream().map(p -> String.valueOf(p.getAge())).collect(Collectors.joining("|"));        System.out.println(result);        result=  list.stream().map(p -> String.valueOf(p.getAge())).collect(Collectors.joining("-","[","]"));        System.out.println(result);               System.out.println("--Join person name-age--");        result=  list.stream().map(p -> p.getName()+"-" + p.getAge()).collect(Collectors.joining("|"));        System.out.println(result);        result=  list.stream().map(p -> p.getName()+"-" + p.getAge()).collect(Collectors.joining("|","[","]"));        System.out.println(result);            }       } 

运行结果为

--Join person name--RamShyamShivMaheshRam|Shyam|Shiv|Mahesh[Ram-Shyam-Shiv-Mahesh]--Join person age--2320253023|20|25|30[23-20-25-30]--Join person name-age--Ram-23|Shyam-20|Shiv-25|Mahesh-30[Ram-23|Shyam-20|Shiv-25|Mahesh-30] 

来源地址:https://blog.csdn.net/qq_33291299/article/details/128550458

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯