首页 > 其他分享 >Spring Guava数据流转换与处理11

Spring Guava数据流转换与处理11

时间:2024-12-07 18:29:32浏览次数:7  
标签:11 Splitter Joiner String Spring 代码 字符串 Guava

在现代开发中,数据流的转换与处理是一个非常常见的需求。无论是从文件读取数据、接收用户输入,还是从数据库提取信息,数据往往需要进行一系列转换和处理。Guava提供了许多工具和类,能够简化这一过程,尤其是在处理数据时,它的链式调用风格使得数据流的处理更加清晰、优雅。通过结合Guava的工具,我们可以实现更加高效和可读的代码。

1. Guava的 FluentIterable:链式处理数据流

FluentIterable 是 Guava 提供的一种增强版的 Iterable,它通过扩展 Iterable 接口,使得开发者能够在数据集合上进行更加优雅的链式操作。FluentIterable 提供了许多常用的流式操作方法,可以用来处理集合或迭代器中的数据,增强代码的可读性与可维护性。


java

复制代码

FluentIterable<String> names = FluentIterable.from(Lists.newArrayList("John", "Jane", "Adam", "Tom")) .filter(name -> name.startsWith("J")) .transform(String::toUpperCase);

在上面的示例中,我们首先创建了一个 FluentIterable 对象,然后对其应用了两个流式操作:

  1. filter():过滤掉不以 J 开头的名字。
  2. transform():将所有名字转换为大写。

通过链式调用,我们避免了多次临时变量的定义,提升了代码的简洁性。

2. 使用 Iterables 进行数据流的处理

Guava的 Iterables 类是处理 Iterable 类型数据的常用工具,尤其在处理大数据量的流式操作时非常有用。Iterables 提供了许多便利的方法来支持数据的过滤、映射、分割等操作。

例如,我们可以利用 Iterables.transform() 来转换集合中的每个元素:


java

复制代码

Iterable<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); Iterable<String> upperCaseNames = Iterables.transform(names, String::toUpperCase); for (String name : upperCaseNames) { System.out.println(name); }

在这个示例中,我们通过 Iterables.transform() 方法对集合中的每个元素进行了转换,将每个名字都转化为大写。Guava的 Iterables 让集合数据的转换变得非常简单并且具有可读性。

3. Joiner 类:轻松实现字符串拼接与合并

在数据处理中,经常需要将多个字符串连接起来,Joiner 类为这一需求提供了高效的解决方案。Joiner 可以用于将集合中的元素按指定分隔符拼接成一个字符串,还提供了处理 null 值的选项。


java

复制代码

List<String> names = Lists.newArrayList("John", "Jane", "Adam", null, "Tom"); // 使用Joiner将集合拼接成一个字符串,并跳过null值 String result = Joiner.on(", ").skipNulls().join(names); System.out.println(result);

输出结果:


复制代码

John, Jane, Adam, Tom

Joiner 还可以将 null 值替换为默认字符串,提供了更大的灵活性:


java

复制代码

String resultWithDefault = Joiner.on(", ").useForNull("Unknown").join(names); System.out.println(resultWithDefault);

输出结果:


sql

复制代码

John, Jane, Adam, Unknown, Tom

通过 Joiner 类,我们能够简化字符串拼接的过程,避免了对 null 值的复杂处理。

4. Splitter 类:方便的字符串分割

Splitter 类是 Guava 中用于分割字符串的工具,类似于 Java 的 String.split() 方法,但它提供了更多的灵活性与选项。Splitter 允许你根据指定的分隔符或正则表达式进行分割,还支持去除空白字符和空字符串。

例如,利用 Splitter 来处理带有多个分隔符的字符串:


java

复制代码

String input = "apple,banana;orange,grape"; Iterable<String> fruits = Splitter.onPattern("[,;]").split(input); for (String fruit : fruits) { System.out.println(fruit); }

输出结果:


复制代码

apple banana orange grape

除了分割字符串,Splitter 还可以帮助你将字符串分割成子字符串列表,支持去除空白字符:


java

复制代码

String inputWithSpaces = "apple, banana, orange"; Iterable<String> fruitsNoSpaces = Splitter.on(",").trimResults().split(inputWithSpaces); for (String fruit : fruitsNoSpaces) { System.out.println(fruit); }

输出结果:


复制代码

apple banana orange

这样,我们就能够轻松处理包含多余空格或多种分隔符的字符串,避免了手动处理这些繁琐的细节。

5. 数据流的链式操作与合并

在实际的应用中,数据流往往需要经过多个操作的处理。Guava的工具类,如 FluentIterable, Iterables, Joiner, 和 Splitter,都非常适合进行流式操作,通过链式调用我们可以实现一系列数据转换和处理,而不需要中间产生额外的临时变量。


java

复制代码

String input = "apple,,banana,,,orange,null,"; List<String> result = Splitter.on(",") .omitEmptyStrings() // 去除空字符串 .splitToList(input) .stream() .map(String::toUpperCase) // 转换为大写 .filter(item -> !item.equals("NULL")) // 过滤掉"NULL" .collect(Collectors.toList()); System.out.println(result);

输出结果:


csharp

复制代码

[APPLE, BANANA, ORANGE]

在这个示例中,我们用了一系列的操作:首先使用 Splitter 对字符串进行分割,去除空字符串,然后使用流 (stream()) 对每个元素进行转换、过滤,最终收集成一个新的列表。

6. 总结

数据流的处理在现代开发中无处不在,而 Guava 提供的流式操作和工具类,让数据处理变得更加简洁、优雅。无论是通过 FluentIterable 进行链式操作,还是使用 JoinerSplitter 处理字符串的拼接与分割,Guava 都为我们提供了高效且易于理解的解决方案。

通过这些工具类,我们可以避免繁琐的 null 检查、空值处理和数据转换,使得代码更具可读性、可维护性,并降低潜在的错误风险。

标签:11,Splitter,Joiner,String,Spring,代码,字符串,Guava
From: https://blog.csdn.net/2401_89358905/article/details/144255928

相关文章

  • AutoConsis:UI内容一致性智能检测11
    可参考美团技术团队1.背景目前,移动App上的业务页面愈发复杂,技术团队常会以页面为单位来拆解团队开发分工,同一类业务元素信息分散在不同团队负责的页面内。在具体的实践中,存在一类不易检出但又影响用户体验的异常:页面中的UI信息相互矛盾(如下图中同一个商品在多个页面上的实际......
  • 【学习笔记】(四)Mybatis整合SpringBoot后的启动与执行流程
    导语上一章介绍了bean的创建与加载流程,本章将粗粒度地介绍Mybatis整合SpringBoot后的启动与执行流程。也算是对上一章内容的补充。因为上一章更多的是介绍一般情况下的bean创建与加载流程。本章会介绍通过@Bean注解或FactoryBean实现类进行bean创建的流程上一章的传送门:Sp......
  • T113-S3 Tina 串口切换
    前面介绍了如何在Tina中添加新的板子及切换存储类型,本节介绍如何修改板子串口配置。1、修改调试串口Tina调试串口配置在device/config/chips/t113/configs/evbemmc/sys_config.fex文件中,可以修改uart_para变量来指定调试串口。;--------------------------------......
  • 毕业设计-基于Java+SpringBoot+Vue校园墙小程序(源码+数据库+开题+项目说明+代码讲解)
    博主介绍:本人专注于java/前端/数据库/微信小程序技术领域的开发,以及五年的计算机毕业设计方面的实战开发经验和技术积累;本人也是多年的全栈开发人员;希望我发布的此篇文件可以帮助到您......
  • 毕业设计-基于Java+SpringBoot+Vue智慧校园小程序(源码+数据库+开题+项目说明+代码讲解
    博主介绍:本人专注于java/前端/数据库/微信小程序技术领域的开发,以及五年的计算机毕业设计方面的实战开发经验和技术积累;本人也是多年的全栈开发人员;希望我发布的此篇文件可以帮助到您......
  • 实战 | C# 中使用YOLOv11实现实例分割 (步骤 + 源码)
    导 读    本文主要介绍在C#中使用YOLOv11实现实例检测,并给详细步骤和源码。C#YOLO11实例分割——本文实现效果:......
  • 信奥赛CSP-J复赛集训(dfs专题)(11):洛谷P1036:[NOIP2002 普及组] 选数
    信奥赛CSP-J复赛集训(dfs专题-刷题题单及题解)(11):洛谷P1036:[NOIP2002普及组]选数题目描述已知nnn个整数x......
  • 七彩虹如何升级Win11?七彩虹升级Win11教程
    很多用户都会购买七彩虹主板来组装电脑,七彩虹是一家知名的主板制造商,此前已经宣布提供升级bios设置的方案,升级完成后,用户就可以开启tpm从而升级Win11系统。那七彩虹如何升级win11呢?下面我们就来看看具体的教程。七彩虹怎么升级win11:1、首先我们需要进入七彩虹的网......
  • 计算机毕业设计 | SpringBoot+vue精品在线试题库系统 线上考试平台(附源码+论文)
    1,绪论1.1研究背景现在大家正处于互联网加的时代,这个时代它就是一个信息内容无比丰富,信息处理与管理变得越加高效的网络化的时代,这个时代让大家的生活不仅变得更加地便利化,也让时间变得更加地宝贵化,因为每天的每分钟,每秒钟这些时间都能让人们处理大批量的日常事务,这些场景......
  • Spring Guava数据流转换与处理15
    在现代开发中,数据流的转换与处理是一个非常常见的需求。无论是从文件读取数据、接收用户输入,还是从数据库提取信息,数据往往需要进行一系列转换和处理。Guava提供了许多工具和类,能够简化这一过程,尤其是在处理数据时,它的链式调用风格使得数据流的处理更加清晰、优雅。通过结合Gua......