场景介绍

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

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

str1|str2|str3|strn

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

代码实现:

    public static void main(String[] args) {
Stu stu1 = new Stu("张三",18);
Stu stu2 = new Stu("李四",18);
Stu stu3 = new Stu("王五",18);
List<Stu> list = new ArrayList<Stu>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
String loopJoint = loopJointDESC(list, list.size());
System.out.println(loopJoint);
} /**
* 实现学生集合的姓名拼接:name1|name2|nameN
* @param list
* @param size 控制递归次数(size=list.size())
* @return
*/
public static String loopJointDESC(List<Stu> list,int size ) {
if(list.size()<=0) return null;
if(size==1) return list.get(0).getName();
String joinStr = "|";
size--;//下标值和递归次数减少1
String name = list.get(size).getName();
String loopJoint = loopJointDESC(list, size);
return name+joinStr+loopJoint;
}

实体类

public class Stu {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Stu(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public Stu() {
super();
}
}

测试结果

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

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

测试结果

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

最后留下两个问题:

当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. ClickHouse的Join算法

    ClickHouse的Join算法 ClickHouse是一款开源的列式分析型数据库(OLAP),专为需要超低延迟分析查询大量数据的场景而生.为了实现分析应用可能达到的最佳性能,分析型数据库(OLAP ...

  2. 17-三态门(TSL)

    三态门(TSL) 普通的逻辑电路只有两个状态,还有一个高阻态. EN是高电平1 A,B,EN之间的关系是与的关系,当EN为1得时候,EN就不起作用了,输入由A,B决定.EN端为高电平,所以二极管D2截 ...

  3. [转帖]TiDB升级、TiFlash测试及对比ClickHouse

    原创 NewSQL 作者:o烟雨潇潇o 时间:2020-05-13 11:53:16  4418  0 TiDB升级.TiFlash测试及对比ClickHouse                   ...

  4. [转帖]LSM-Tree:从入门到放弃——入门:基本概念、操作和Trade-Off分析

    https://zhuanlan.zhihu.com/p/428267241 LSM-Tree,全程为日志结构合并树,有趣的是,这个数据结构实际上重点在于日志结构合并,和 tree 本身的关系并不是特 ...

  5. [转帖]Jmeter学习笔记(十七)——jmeter目录结构

      原文链接:http://www.cnblogs.com/zichuan/p/6938772.html 一.bin目录examples:  目录中有CSV样例 jmeter.bat  windows ...

  6. nginx 企业版与开源版本的区别

  7. Springboot actuator的简单使用

    Springboot actuator的简单使用 简介 公司基于springboot研发的系统,开发已经默认集成了actuator 为了安全起见这个插件模式是不开启的. 今天与研发同事进行了沟通,简单 ...

  8. Opentelemetry Collector的配置和使用

    Collector的配置和使用 目录 Collector的配置和使用 Collector配置 Receivers Processors Exporters Service Extensions 使用环 ...

  9. 强大的AWS lambda

    AWS强大的lambda 自从几年前换工作后,我所参与的项目一直都是基于AWS云服务的架构,我慢慢对serverless的相关基础建设有了一定了解和实践经验.其中lambda是我心中最强大的serve ...

  10. SpringBoot实现动态数据源配置

    场景描述: 前一阵子接手的新项目中需要使用2个数据源. 一个叫行云数据库,一个叫OceanBase数据库. 就是说,我有时候查询要查行云的数据,有时候查询要查 OceanBase 的数据,咋办? 废话 ...