iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java实战小技巧之字符串与容器互转详解
  • 879
分享到

java实战小技巧之字符串与容器互转详解

2024-04-02 19:04:59 879人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录前言I. 字符串转列表1. jdk支持方式2. guava方式3. apache-commonsII. 列表转字符串1. StringBuilder2. String.join3

前言

每天一个实战小技巧:字符串与Collection的互转

将字符串转换为List,这种业务场景可以说非常非常常见了,实现方式也比较简单


public List<String> str2list(String str, String split) {
    String[] cells = str.split(split);
    return Arrays.asList(cells);
}

那么除了上面这种实现方式之外,还有其他的么?

I. 字符串转列表

上面的实现姿势相当于字符串先转数组,然后在通过数组转列表,所以可以沿用前一篇字数组转list的几种方式

1. jdk支持方式

借助Collections.addAll来实现


public List<String> str2list2(String str, String split) {
    List<String> list = new ArrayList<>();
    Collections.addAll(list, str.split(split));
    return list;
}

上面这种方式适用于输出String的列表,如果我希望转成int列表呢?可以采用下面的方式


public List<Integer> str2intList(String str, String split) {
    return Stream.of(str.split(split))
            .map(String::trim)
            .filter(s -> !s.isEmpty())
            .map(Integer::valueOf).collect(Collectors.toList());
}

直接将数组转换为流,然后基于jdk8的特性,来实现转换为int列表

2. guava方式

引入依赖


<!-- https://mvnrepository.com/artifact/com.Google.guava/guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>30.1-jre</version>
</dependency>

除了使用jdk原生的方式之外,借助guava也是非常常见的的case了,主要通过Splitter来实现,写法看起来非常秀


public List<String> str2list2(String str, String split) {
    return Splitter.on(split).splitToList(str);
}

简单直接的一行代码搞定,如果我们希望是对输出的列表类型进行指定,也可以如下操作


public List<Integer> str2intListV2(String str, String split) {
    return Splitter.on(split).splitToStream(str)
            .map(String::trim).filter(s -> !s.isEmpty())
            .map(Integer::valueOf).collect(Collectors.toList());
}

3. apache-commons

引入依赖


 <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>

上面流的方式就很赞了,但是注意它是有jdk版本限制的,虽说现在基本上都是1.8以上的环境进行开发,但也不排除有上古的代码,比如我现在手上的项目spring还是3…

如果我们不能使用流的方式,那么有什么简单的方式来实现字符串转换为指定类型的列表么?


public List<Integer> str2intListV3(String str, String split) {
    List<Integer> result = new ArrayList<>();
    CollectionUtils.collect(Arrays.asList(str.split(split)), new TransfORMer<String, Integer>() {
        @Override
        public Integer transform(String s) {
            return Integer.valueOf(s);
        }
    }, result);
    return result;
}

上面这个实现也没有多优雅,不过这里有个编程小技巧可以学习,new Transformer(){}的传参方式,这种实现方式有点像回调的写法,虽然他们有本质的区别,此外就是jdk8之后的函数方法,就充分的体现这种设计思路,比如上面的换成jdk8的写法,直接简化为


 
public List<Integer> str2intListV3(String str, String split) {
    List<Integer> result = new ArrayList<>();
    CollectionUtils.collect(Arrays.asList(str.split(split)), Integer::valueOf, result);
    return result;
}

II. 列表转字符串

1. StringBuilder

最容易想到的,直接使用StringBuilder来实现拼接


public String list2str(List<String> list, String split) {
    StringBuilder builder = new StringBuilder();
    for (String str: list) {
        builder.append(str).append(split);
    }
    return builder.substring(0, builder.length() - 1);
}

注意两点:

  • 使用StringBuilder而不是StringBuffer (why?)
  • 注意最后一个拼接符号不要

2. String.join

一个更简单的实现方式如下


public String list2str2(List<String> list, String split) {
    return String.join(split, list);
}

当然上面这个的缺点就是列表必须是字符串列表,如果换成int列表,则不行

3. gauva

guava也提供了列表转String的方式,同样很简单,而且还没有列表类型的限制


public <T> String list2str3(List<T> list, String split) {
    return Joiner.on(split).join(list);
}

III. 小结

本文的考题也非常常见,列表与字符串的互转,这里介绍了多种实现方式,有jdk原生的case(如果没有什么限制,推荐使用它, String.split除外,原因后面再说),如果有更高级的定制场景,如非String类型类表,则可以考虑guava的Splitter/Joinner来实现

在上面的实现中,也提供了几种有意思的编程方式

  • Stream: 流,jdk8之后非常常见了
  • 函数方法,回调写法case

总结

到此这篇关于java实战小技巧之字符串与容器互转的文章就介绍到这了,更多相关java字符串与容器互转内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: java实战小技巧之字符串与容器互转详解

本文链接: https://www.lsjlt.com/news/132748.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作