场景介绍

要将list 集合中的某一个字段合并成一个字符串,并且要用符号 “|” 分割开每个拼接后的字段。

一个例子胜于一切的文字表达,拼接后的结果如下

  1. str1|str2|str3|strn

其实用for 循环很简单就可以实现了,但可能你更喜欢递归的方式实现。

代码实现:

  1. public static void main(String[] args) {
  2. Stu stu1 = new Stu("张三",18);
  3. Stu stu2 = new Stu("李四",18);
  4. Stu stu3 = new Stu("王五",18);
  5. List<Stu> list = new ArrayList<Stu>();
  6. list.add(stu1);
  7. list.add(stu2);
  8. list.add(stu3);
  9. String loopJoint = loopJointDESC(list, list.size());
  10. System.out.println(loopJoint);
  11. }
  12.  
  13. /**
  14. * 实现学生集合的姓名拼接:name1|name2|nameN
  15. * @param list
  16. * @param size 控制递归次数(size=list.size())
  17. * @return
  18. */
  19. public static String loopJointDESC(List<Stu> list,int size ) {
  20. if(list.size()<=0) return null;
  21. if(size==1) return list.get(0).getName();
  22. String joinStr = "|";
  23. size--;//下标值和递归次数减少1
  24. String name = list.get(size).getName();
  25. String loopJoint = loopJointDESC(list, size);
  26. return name+joinStr+loopJoint;
  27. }

实体类

  1. public class Stu {
  2. private String name;
  3. private Integer age;
  4. public String getName() {
  5. return name;
  6. }
  7. public void setName(String name) {
  8. this.name = name;
  9. }
  10. public Integer getAge() {
  11. return age;
  12. }
  13. public void setAge(Integer age) {
  14. this.age = age;
  15. }
  16. public Stu(String name, Integer age) {
  17. super();
  18. this.name = name;
  19. this.age = age;
  20. }
  21. public Stu() {
  22. super();
  23. }
  24. }

测试结果

发现反过来拼接了,于是改为

  1. public static String loopJointASC(List<Stu> list,int size ) {
  2. if(list.size()<=0) return null;
  3. if(size==1) return list.get(list.size()-1).getName();
  4. String joinStr = "|";
  5. String name = list.get(list.size()-size).getName();
  6. size--;//下标值和递归次数减少1
  7. String loopJoint = loopJointASC(list, size);
  8. return name+joinStr+loopJoint;
  9. }

测试结果

分隔符 “|” 可自己定义也可以删除。

最后留下两个问题:

当list非常大的时候,使用for 循环和递归哪种实现方式的速度更快呢?

双层for 循环改为,for循环+递归性能会不会更好呢?

更多优质文章、学习资源、IDEA激活码等请关注

Java 递归的方式将list集合的某一字段拼接单个String的更多相关文章

  1. java中GET方式提交和POST方式提交

    java中GET方式提交的示例: /** * 获取关注列表; * @return */ @SuppressWarnings("unchecked") public static A ...

  2. Java非递归的方式获取目录中所有文件(包括目录)

    零.思路解析 对于给出的文件查看其下面的所有目录,将这个目录下的所有目录放入待遍历的目录集合中,每次取出该集合中的目录遍历,如果是目录再次放入该目录中进行遍历. 一.代码 /** * 非递归的方式获取 ...

  3. Java常用排序算法及性能测试集合

    测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...

  4. Java笔记(二十二)……Collection集合

    概述 为什么会出现集合类 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式 数组和集合类同是容器,有何不同 数组虽然也可以存储 ...

  5. Java基础学习笔记十五 集合、迭代器、泛型

    Collection 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数组既然都 ...

  6. Java多线程 阻塞队列和并发集合

    转载:大关的博客 Java多线程 阻塞队列和并发集合 本章主要探讨在多线程程序中与集合相关的内容.在多线程程序中,如果使用普通集合往往会造成数据错误,甚至造成程序崩溃.Java为多线程专门提供了特有的 ...

  7. [原创] JAVA 递归线程池测试 ExecutorService / ForkJoinPool

    测试工具使用递归的方式获取子进程的Msg消息,目前有2种常用的ExecutorService / ForkJoinPool 为了测试哪种效果较好,我们来写个测试Demo,循环5555555次+1(加锁 ...

  8. Java高级特性 第1节 集合框架和泛型

    Java中,存储多个同类型的数据,可以用数组来实现,但数组有一些缺陷: 数组长度固定不变,布恩那个很好的适应元素数量动态变化的情况 可以通过数组.length获取数组长度,却无法直接获取数组中实际存储 ...

  9. MyBatis基础入门《四》接口方式.Select查询集合

    MyBatis基础入门<四>接口方式.Select查询集合 描述: 在<MyBatis基础入门<二>Select查询>中有说过,SQLSession有两种用法,这里 ...

  10. java递归之“二叉树”

    物有本末,事有始终,知所先后,则近道矣.-----题记. BotWong半路入行it做码农,也就半年时间,竟“不知天高地厚”地来到了深圳闯天下.一口气投了百个简历,一周后终于有公司邀约面试,除了基础的 ...

随机推荐

  1. 2023浙江省大学生信息安全竞赛技能赛初赛 部分wp

    CRYPTO 小小数学家 1.题目信息 查看代码 19+49=? 96-31=? 86-3=? 20+47=? 29+55=? 35+35=? 81+42=? 73-16=? 52+48=? 0+56 ...

  2. JMS微服务开发示例(九)相同的微服务,按用户所在城市来分配微服务器

    虽然,默认情况下,多个相同的微服务,网关是自动根据微服务的压力情况,把用户请求分配到压力较轻的微服务器上. 但是,在某些业务情景下,我们可能希望人为去控制微服务的请求分配. 举个例子,我在北京.上海. ...

  3. mysql-三元表达式函数-if

  4. 【中介者模式(Mediator)】使用Java实现中介者模式

    引言 中介者,何为中介者,顾名思义就是我们的在处理A和B之间的关系的时候,引入一个中间人,来处理这两者之间的关系,例如生活中我们需要去租房,买房,都会有中介,来处理房东和租客之间的协调关系,这个就是中 ...

  5. [转帖]sqluldr2 oracle直接导出数据为文本的小工具使用

    https://www.cnblogs.com/ocp-100/p/11098373.html 近期客户有需求,导出某些审计数据,供审计人进行核查,只能导出成文本或excel格式的进行查看,这里我们使 ...

  6. [转帖]一起来体验96核心、192线程CPU——第四代AMD EPYC处理器独家测试

    http://k.sina.com.cn/article_1882475282_70344b12027010s1x.html 与第三代EPYC 7003系列处理器相比,新一代EPYC 9004系列处理 ...

  7. [转帖]C2C - False Sharing Detection in Linux Perf

    https://joemario.github.io/blog/2016/09/01/c2c-blog/ Do you run your application in a NUMA environme ...

  8. reposync与createrepo创建离线yum源的方法

    背景 昨天晚上进行了在线升级银河麒麟V10SP2的audit和mate-indicator的rpm包 今天想了下,如果机器无法上网. 必须得在公司内部搭建一套离线的rpm源进行处理 想了下还是使用re ...

  9. ESXi 虚拟机性能情况简单验证

    1.虚拟化的CPU超售问题. 经过查找资料, 发现 ESXi 5.5 的版本 一个 物理CPU的Core 可以虚拟出 25个vCPU, 升级到ESXi6.0 之后可以虚拟化32个vCPU. 所以虚拟化 ...

  10. VScode中下载了插件但是无法找到SSH Target连接服务器的解决方法(CANNOT find SSH Target in remote explorer)

    VSCode版本vscode version:(version 1.82) 已下载扩展installed extensions: Remote - SSH v0.106.4 Remote - SSH: ...