Java 递归的方式将list集合的某一字段拼接单个String
场景介绍
要将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激活码等请关注👇