Java String 转换 List

这篇具有很好参考价值的文章主要介绍了Java String 转换 List。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、代码

java 代码

import com.google.common.base.Splitter;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;


public class StringConvertsList {
    public static final Logger log = LoggerFactory.getLogger(StringConvertsList.class);

    public static void main(String[] args) {
        String str = "张  三, 李四 ,王五,赵六,张  三";

        // 1: split()和Arrays.asList()
        List<String> list1 = splitAndTrim(str);
        printList(list1, 1);

        // 2: 使用Stream API
        List<String> list2 = usingStream(str);
        printList(list2, 2);

        // 3: 使用Guava库的Splitter类
        List<String> list3 = usingGuava(str);
        printList(list3, 3);

        // 4: 使用Apache Commons库的StringUtils类
        List<String> list4 = usingStringUtils(str);
        printList(list4, 4);
    }

    /**
     * 1:split()和Arrays.asList()
     * <p>
     * Arrays.asList(strArr)返回的是java.util.Arrays.ArrayList,而不是常用的java.util.ArrayList。
     * java.util.Arrays.ArrayList是数组的内部类,它不支持添加或删除元素的操作,但可以修改现有元素。
     * 当调用Arrays.asList(strArr)时,它会将数组转换为一个固定大小的列表。这个列表是一个视图,与原始数组共享同一块内存。
     * 因此,对列表的修改实际上是对原始数组进行的修改。
     *
     * <p>
     * 性能:这种方法在性能上比较高效,因为它直接使用了Java标准库提供的split()方法和Arrays.asList()方法。
     * <p>
     * 使用场景:适用于简单的字符串分割和去除空格操作,且对性能要求较高的情况。
     */
    private static List<String> splitAndTrim(String str) {
        String[] strArr = str.split(",");
        List<String> list = Arrays.asList(strArr);
        removeSpaces(list);
        return list;
    }

    /**
     * 2:使用Stream API:
     * <p>
     * str.split(",") 返回一个字符串数组,然后使用.of() 方法将该数组转换为一个 Stream 对象。
     * .of() 是 Stream 接口中的一个静态方法。它接受一个参数,将该参数(一个数组或一组元素)转换为一个 Stream 对象。
     *
     * <p>
     * 性能:Stream API在处理大量数据时可能会影响性能,因为它需要创建和操作流对象。
     * <p>
     * 使用场景:适用于对集合进行复杂操作和转换,且代码可读性较高的情况。
     */
    private static List<String> usingStream(String str) {
        List<String> list = Stream
                .of(str.split(","))
                .map(String::trim)
                .collect(Collectors.toList());
        removeSpaces(list);
        return list;
    }

    /**
     * 3:使用Guava库的Splitter类:
     * <p>
     * 直接使用Splitter方法返回的是一个不可修改的List,
     * 重新 new 一个 arrayList 修改 list 去除字符串中间的空格
     *
     * <p>
     * 性能:Guava的Splitter类提供了更多的功能和灵活性,但相对于其他方法,性能稍差。
     * <p>
     * 使用场景:适用于需要更精细的字符串处理和拆分规则的情况,例如可以指定多个分隔符、保留空字符串等。
     */
    private static List<String> usingGuava(String str) {
        List<String> list = new ArrayList<>(Splitter
                .on(",")// 1. 指定分隔符为逗号
                .trimResults()    // 2. 去除每个分隔后的字符串的前后空格
                .omitEmptyStrings() // 3. 去除结果列表中的空字符串
                .splitToList(str)); // 4. 将字符串按照分隔符拆分为列表
        removeSpaces(list);
        return list;
    }

    /**
     * 4:使用Apache Commons库的StringUtils类:
     *
     * <p>
     * 性能:和第一种方法类似,性能较高,但不如Stream API那么灵活。
     * <p>
     * 使用场景:适用于简单的字符串分割和去除空格操作,且习惯使用Apache Commons库的情况。
     */
    private static List<String> usingStringUtils(String str) {
        String[] strArr = StringUtils.split(str, ",");
        List<String> list = Arrays.asList(strArr);
        removeSpaces(list);
        return list;
    }

    /**
     * 去除空格
     */
    public static void removeSpaces(List<String> list) {
        // 去除前后的空格
        list.replaceAll(String::trim);
        // 去除列表中每个元素中间的空格
        list.replaceAll(s -> s.replaceAll(" ", ""));
    }

    /**
     * 输出
     */
    public static void printList(List<String> list, Integer method) {

        // JDK 14 引入了新的 Switch 表达式语法,允许使用箭头符号(->)
        switch (method) {
            case 1 -> log.debug("1:split()和Arrays.asList():");
            case 2 -> log.debug("2:Stream API");
            case 3 -> log.debug("3:Guava库的Splitter");
            case 4 -> log.debug("4:Apache Commons库的StringUtils");
        }

        // 需要去重使用distinct()
        list.stream().distinct().forEach(log::info);
        System.out.println();
    }
}

pom 代码

<dependencies>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.12.0</version>
    </dependency>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>32.0.0-jre</version>
    </dependency>
    <!--日志-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.7</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.18.0</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.4.8</version>
    </dependency>
</dependencies>

2、性能及场景

每种方法的性能和使用场景如下:

  1. split()和Arrays.asList()

    • 性能:这种方法在性能上比较高效,因为它直接使用了Java标准库提供的split()方法和Arrays.asList()方法。

    • 使用场景:适用于简单的字符串分割和去除空格操作,且对性能要求较高的情况。

  2. 使用Stream API:

    • 性能:Stream API在处理大量数据时可能会影响性能,因为它需要创建和操作流对象。
    • 使用场景:适用于对集合进行复杂操作和转换,且代码可读性较高的情况。
  3. 使用Guava库的Splitter类:

    • 性能:Guava的Splitter类提供了更多的功能和灵活性,但相对于其他方法,性能稍差。
    • 使用场景:适用于需要更精细的字符串处理和拆分规则的情况,例如可以指定多个分隔符、保留空字符串等。
  4. 使用Apache Commons库的StringUtils类:文章来源地址https://www.toymoban.com/news/detail-756554.html

    • 和第一种方法类似,性能较高,但不如Stream API那么灵活。
    • 适用于简单的字符串分割和去除空格操作,且习惯使用Apache Commons库的情况

3、总结

  1. 如果对性能要求较高,且只需要简单的字符串分割和去除空格操作,推荐使用split()和Arrays.asList()方法。
  2. 如果对集合操作较复杂或代码可读性较重要,使用Stream API可以方便实现链式操作。
  3. 如果需要更多的字符串处理功能或更灵活的拆分规则,可以选择Guava库的Splitter类。
  4. 如果习惯使用Apache Commons库,可以选择StringUtils类。

到了这里,关于Java String 转换 List的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JSON转换List<Map<String, Object>>、Map<String, Object>

    废话就不说了 早上10点研究到现在 获取redis的JSON字符串 String getPalletListNew = redisService.getRedis(“getPalletListNew”, abroad + “” + goodsLevel + “” + startPort + “” + destinationPort + “” + maxTon + “” + minTon); 转换MapString,Object public MapString, Object jsonToMap(String json){ MapString, Object map = new

    2024年02月20日
    浏览(50)
  • List转换String字符串几种方式

    1、传统循环并拼接的方式 2、Java8 String.join()  StringUtils.join() 和 String.join()用途:将数组或集合以某拼接符拼接到一起形成新的字符串。 这里和StringUtils.join()有区别,参数顺序不一样,另外,StringUtils.join()可以传入Integer或者其他类型的集合或数组,而String.join()尽可以传入实

    2024年02月14日
    浏览(47)
  • Java String list 转 String[]

    太久没写这么基础的java代码了,直接调用(String[])indexs.toArray(),结果报错java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.String; ([Ljava.lang.Object; and [Ljava.lang.String; are in module jatrap\\\'),想了一下,记录免得下次又忘记了 直接使用 list.stream().toArray(String[]::new

    2024年02月15日
    浏览(47)
  • Java List toArray(new String[0]) 的理解&List的toArray()方法详解

    1、ArrayList的toArray ArrayList提供了一个将List转为数组的一个非常方便的方法toArray。toArray有两个重载的方法: (1)list.toArray(); (2)list.toArray(T[] a); 不明真像的同学喜欢用第一个,是这样写: 结果一运行,报错: 原因一看就知道了,不能将Object[] 转化为String[],转化的话只能

    2024年02月07日
    浏览(56)
  • Java多条件排序使用Comparator和thenComparing【包含排序List<Map<String, String>>】

    在Java中,对一个列表或集合进行排序时,经常需要基于多个条件来排序。幸运的是,Java提供了强大的 Comparator 接口,以及 thenComparing 方法,使我们能够轻松地实现多条件排序。 Comparator 接口是Java用于自定义对象排序的关键接口。它包含了一个 compare 方法,允许我们定义如何

    2024年02月04日
    浏览(50)
  • java8 list对象string字符串求和

    Java 8 中可以使用 Stream API 和 reduce() 方法来对 List 中的字符串进行求和。 举个例子,假设你有一个 List 叫做 \\\"numbers\\\",你可以这样求和: 或者这样求和 这样得到的结果就是 \\\"12345\\\"。 在这个例子中,我们使用 reduce() 方法对 List 中的所有字符串进行求和,其中第一个参数是初始值

    2024年02月15日
    浏览(58)
  • java lambda 工作中使用大全 Lambda表达式将 List<String> 转 List<Long>

    工作中常用的lambda 操作 lambda表达式将List对象某个字段转换以逗号分隔的String类型

    2024年02月12日
    浏览(69)
  • Java for循环每次都通过list.size()和 string.length()获取大小性能

    有人说在for循环之前用一个局部变量先获取到list.size()、str.length(),然后在for循环的判断条件里通过这个局部变量替换list.size()、str.length()会节省数据计算的时间。事实真的是这样吗?下面就为大家解答这个问题。 说明:此文章针对Android SDK 进行说明。 List.size() 首先我们看一

    2024年02月09日
    浏览(44)
  • Java8使用stream流给List<Map<String,Object>>分组(多字段key)

    Java8使用 stream流 给ListMapString,Object根据字段key 分组 一、项目场景: 从已得到的List集合中,根据某一元素(这里指map的key)进行分组,筛选出需要的数据。 如果是SQL的话则使用 group by 直接实现,代码的方式则如下: 使用到stream流的 Collectors.groupingBy() 方法。 二、代码实现 1、首

    2024年02月02日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包