场景介绍

要将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. 基于Tensorflow技术开发的计算机毕业设计辅助生成器(使用AI大模型技术)

    这是一个辅助生成计算机毕业设计的工具,可以自动完成毕业设计的源码.它基于几百个github上面开源的java和python项目,运用tensorflow技术,训练出了AI大模型.基本实现了计算机毕业设 ...

  2. 【BUS】LIN Bus

    概述 随着汽车内电子设备的增多,市场上对于成本低于 CAN 的总线的需求日益强烈,不同的车厂相继开发各自的串行通信(UART/SCI)协议,以在低速和对性能要求不高的场合取代CAN.由于不同车厂定义的 ...

  3. C# 线程本地存储 为什么线程间值不一样

    一:背景 1. 讲故事 有朋友在微信里面问我,为什么用 ThreadStatic 标记的字段,只有第一个线程拿到了初始值,其他线程都是默认值,让我能不能帮他解答一下,尼玛,我也不是神仙什么都懂,既然问 ...

  4. [转帖]如何对minio进行性能测试和分析

    https://developer.aliyun.com/article/1006775   环境详情 server(组成集群,ec为12:4) ip hosts 硬盘 storage01 172.1 ...

  5. [转帖]Jmeter创建简单的HTTP(S)请求测试-3

    在上一章节中,介绍了Jmeter基本的组成组件,那么我们如何使用这些组件去完成测试呢,以下将通过创建一个简单的HTTP(S)测试进行说明,另外,除JDBC请求外,Jmeter进行测试构建的步骤大同小异 ...

  6. [转帖]大模型训练,英伟达Turing、Ampere和Hopper算力分析

    https://www.eet-china.com/mp/a219195.html 大 GPU 优势在于通过并行计算实现大量重复性计算.GPGPU即通用GPU,能够帮助 CPU 进行非图形相关程序的运 ...

  7. Stream的简单学习

    Stream的简单学习 前言 https://github.com/jeffhammond/STREAM unzip STREAM-master.zip cd /STREAM-master/ make ...

  8. Mysql到TiDB迁移,双写数据库兜底方案

    作者:京东零售 石磊 TiDB 作为开源 NewSQL 数据库的典型代表之一,同样支持 SQL,支持事务 ACID 特性.在通讯协议上,TiDB 选择与 MySQL 完全兼容,并尽可能兼容 MySQL ...

  9. 【码农教程】手把手教你学会Mockito使用

    作者:京东零售 秦浩然 一.前期准备- 1.准备工作 <!--mockito依赖--> <dependency> <groupId>org.mockito</ ...

  10. 在web中,用户输入的文字过多 和页面排版一行显示不下 怎么办

    在写管理系统中, 如果用户在input中,表单输入过多,应该如何去处理 常用的解决办法是: 1==>用户只能够输入一定范围内的字数 2==>超出几个字后(宽度)使用省略号显示. 3==&g ...