Java将List转换为String的几种常见方式

 更新时间:2024年03月21日 10:38:10   作者:zuihongyan518  
在实际开发中经常遇到List转为String字符串的情况,下面这篇文章主要给大家介绍了关于Java将List转换为String的几种常见方式,文中通过代码介绍的非常详细,需要的朋友可以参考下

将 List 转换为 String的几种方式

  • 使用 List的toString()方法将 List 转换为 String;结果前后会带有英文的中括号[],如:[1, 2, 3, 4, 5]
  • 使用Java8 stream流中的Collections.joining()方法,带有逗号分隔符或自定义分隔符将集合转成String字符串
  • 使用String.join()方法将带有逗号分隔符或自定义分隔符的集合转换为字符串
  • 使用Apache commons包下的StringUtils.join()方法;转成的String结尾带有分隔符小尾巴,如:"张三,李四,"
  • 使用 StringBuilder、StringBuffer的append方法自定义join()方法

第一种:List.toString方法

List.toString()产生的结果会在开头和结尾添加英文中括号,每个字符串用逗号分隔符分隔(分隔符不可更变)。如果我们想去掉方括号的话,需要借助String.replaceAll方法。

/**
  * List的toString方法,结果前后会带有英文的中括号[],如:[1, 2, 3, 4, 5]
  */
public static void main(String[] args) {
   List<Integer> asList = Arrays.asList(1, 2, 3, 4, 5);
   
   String list2String = asList.toString();
   System.out.println(list2String);
   //使用replaceAll方法替换 中括号
   list2String = list2String.replaceAll("\\[|]", "");
   System.out.println(list2String);
}

第二种:Stream流转String

java8 stream中提供了Collectors.join()方法可用于将集合转成为具有指定分隔符、前缀和后缀的字符串。

public class Demo2 {

    /**
     * List 转 String
     * stream流中的Collections.joining方法
     **/
    public static void main(String[] args) {
        List<String> list = Arrays.asList("张三", "李四", "王武", null, "麻子");
        //java stream流中的Collections.joining方法
        //指定分隔符
        String collect = list.stream().collect(Collectors.joining(","));
        //没有分隔符,直接拼接
        String collect1 = list.stream().collect(Collectors.joining());
        //指定分隔符,前缀,后缀
        String collect2 = list.stream().collect(Collectors.joining(",", "{", "}"));
        System.out.println(collect);//张三,李四,王武,null,麻子
        System.out.println(collect1);//张三李四王武null麻子
        System.out.println(collect2);//{张三,李四,王武,null,麻子}
    }
}

第三种:String.join()方法

java8 String添加了一个特殊的Join方法,用于将集合转换为指定分隔符连接的字符串。

   /**
     * String.join()
     **/
    public static void main(String[] args) {
        List<String> list = Arrays.asList("张三", "李四", "王武", null, "麻子");
        String join = String.join(",", list);
        System.out.println(join);//张三,李四,王武,null,麻子
    }

第四种:StringUtils.join()方法

Apache commons包的外部库有一个方法StringUtils.join() 方法,它类似于 String.join() 方法,用于将集合转成指定分隔符链接的字符串;但是,如果集合中有null的话,会被转换成空串。

   /**
     * StringUtils.join()
     **/
    public static void main(String[] args) {
        List<String> list = Arrays.asList("张三", "李四", "王武", null, "麻子");
        //StringUtils.join方法,集合中有null的话,会转成空串""
        String join = StringUtils.join(list, ",");
        System.out.println(join); //张三,李四,王武,,麻子
    }

第五种:自定义Join方法

java中提供了StringBuilder、StringBuffer两个类,可以使用他们提供的append方法自定义join方法,将集合转成字符串。

   /**
     * StringBuilder、StringBuffer的append()方法
     **/
    public static void main(String[] args) {
        List<String> list = Arrays.asList("张三", "李四", "王武", null, "麻子");
        //3. StringBuilder、StringBuffer的append方法自定义join方法
        StringBuilder sb = new StringBuilder();
        for (String s : list) {
            sb.append(s).append(",");
        }
        //sb.insert(0, "join如下:");
        if (sb.length() > 1) {
            sb.deleteCharAt(sb.length() - 1);
        }
        System.out.println(sb.toString()); //张三,李四,王武,null,麻子
    }

逻辑如上,上面逻辑可以封账成一个通用的join方法

public class Demo2 {

    public static class ListJoin<E> {

        public String join(String delimiter, Collection<? extends E> list) {
            Objects.requireNonNull(delimiter);
            Objects.requireNonNull(list);
            StringBuilder result = new StringBuilder();
            for (E obj : list) {
                //根据需要对空进行处理
                if (Objects.isNull(obj)) {
                    continue;
                }
                result.append(obj).append(delimiter);
            }
            if (result.length() > 1) {
                result.deleteCharAt(result.length() - 1);
            }

            return result.toString();
        }
    }

    /**
     * StringBuilder、StringBuffer的append()方法
     **/
    public static void main(String[] args) {
        List<String> list = Arrays.asList("张三", "李四", "王武", null, "麻子");
        //上述join方法可以修改成通用的join方法
        ListJoin<String> strDemo = new ListJoin<>();
        String join = strDemo.join(",", list);
        System.out.println(join); //张三,李四,王武,麻子

        ListJoin<Integer> intDemo = new ListJoin<>();
        List<Integer> asList = Arrays.asList(1, 2, 3, 4, 5);
        String intJoin = intDemo.join("-", asList);
        System.out.println(intJoin); //1-2-3-4-5
    }
}

以上方式都可以将List集合转成字符串,具体根据业务需要使用不同方式。

附:List转String时注意事项

Object类是所有对象类的父类,而toString方法只能把那些可以转换为字符串的类型对象转换为字符串,否则转换后还是一个对象。

例如:

“woshizifuchuan”是一个String类型的对象,“woshizifuchuan”.toString();结果还是“woshizifuchuan”;

Org是一个组织的对象,如果Org.toString();结果是不正常的,因为Org对象中可能有多个属性,如组织名称,组织等,这个toString后无法知道具体的是那个属性转换为字符串,所以就不会正常显示。
备注:所有的java开发都是有一定原则的,不是说不报错就一切运行ok,要根据实际情况进行类型转换。

你先看一下Object类中的toString()方法源码:

public String toString() { 
return getClass().getName() +"@"+Integer.toHexString(hashCode()); //打印类的全命名+内存地址
} 

假如你的类复写了Object类(此类为Java根基类)中的toString()方法;

例如:

public String toString(){ 
     return "name:" + this.name+ ", pwd:"+this.pwd;
    //这里才是你要返回的值 如果没复写则调用Object类中的toString()方法,所以具体输出形式自己定
        }

还可以在项目中引入fastjson.jar包,将对象转为字符串很简单的。
调用JSON.toJSONString(Org)转为json字符串。

总结

到此这篇关于Java将List转换为String的几种常见方式的文章就介绍到这了,更多相关Java将List转换为String内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux重启java服务的脚本

    linux重启java服务的脚本

    这篇文章主要介绍了linux重启java服务的脚本,本文分步骤通过shell脚本给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • SpringMVC之返回JSON的三种方式

    SpringMVC之返回JSON的三种方式

    现在都是前后端分离了,后端只需要跟前端提供restful接口,所有接口都返回json格式数据即可,SpringMVC通常有3种方式向前端输出json格式数据,下面我们就来了解一下
    2023-06-06
  • Servlet3.0实现文件上传的方法

    Servlet3.0实现文件上传的方法

    本篇文章主要介绍了Servlet实现文件上传的方法,所谓文件上传就是将本地的文件发送到服务器中保存。有兴趣的可以了解一下。
    2017-03-03
  • Java中FileWriter类的常用方法说明

    Java中FileWriter类的常用方法说明

    这篇文章主要介绍了Java中FileWriter类的常用方法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Spring Boot日志的策略解析与门面模式

    Spring Boot日志的策略解析与门面模式

    这篇文章主要介绍了Spring Boot日志的策略解析与门面模式,日志对我们来说并不陌⽣,通过打印日志来发现和定位问题,或者根据日志来分析程序的运行过程,Spring Boot中的日志管理是非常重要的,需要的朋友可以参考下
    2024-05-05
  • Java设计模式之java迭代器模式详解

    Java设计模式之java迭代器模式详解

    这篇文章主要介绍了java迭代器模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-09-09
  • 如何修改FeginCilent定义的服务名到指定服务

    如何修改FeginCilent定义的服务名到指定服务

    这篇文章主要介绍了修改FeginCilent定义的服务名到指定服务的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java中DecimalFormat用法详解

    Java中DecimalFormat用法详解

    这篇文章主要为大家详细介绍了Java中DecimalFormat的用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • java实现Object和Map之间的转换3种方式

    java实现Object和Map之间的转换3种方式

    本篇文章主要介绍了java实现Object和Map之间的转换3种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Java AOP动态代理详细介绍

    Java AOP动态代理详细介绍

    AOP是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程的一种补充和完善。本文将用Java实现AOP代理的三种方式,需要的可以参考一下
    2022-08-08

最新评论