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激活码等请关注👇

 

posted @ 2021-06-07 17:24  渊渟岳  阅读(2793)  评论(0编辑  收藏  举报