首页 > 其他分享 >StremUtil使用

StremUtil使用

时间:2024-08-14 16:54:12浏览次数:10  
标签:CarriageEntity map associatedCity StremUtil 使用 字符串 操作 StreamUtil

一、代码示例

//将查询出的运费模板中的关联城市收集起来
List<String> associatedCityList = StreamUtil.of(list)
                //排除掉自己,检查与其他模板是否存在冲突
                .filter(carriageEntity -> ObjectUtil.notEqual(carriageEntity.getId(), carriageDto.getId()))
                //获取关联城市
                .map(CarriageEntity::getAssociatedCity)
                //将关联城市按照逗号分割
                .map(associatedCity -> StrUtil.split(associatedCity, ','))
                //将上面得到的集合展开,得到字符串
                .flatMap(StreamUtil::of)
                //收集到集合中
                .collect(Collectors.toList());        

二、 详细解释

1. **`StreamUtil.of(list)`**:
   - `StreamUtil` 是一个实用类,`of` 方法用于将一个 `List` 转换为一个流 (`Stream`)。
   - `list` 是一个包含 `CarriageEntity` 实体对象的列表。使用流后,可以对这个列表进行一系列的操作,如过滤、映射、转换等。

2. **`.filter(carriageEntity -> ObjectUtil.notEqual(carriageEntity.getId(), carriageDto.getId()))`**:
   - `filter` 方法用于过滤流中的元素,只有满足条件的元素会保留在流中。
   - 在这里,`ObjectUtil.notEqual` 用于检查当前的 `CarriageEntity` 对象的 `id` 是否与 `carriageDto` 的 `id` 不相等。换句话说,`filter` 方法会排除与传入的 `carriageDto` 对象相同的模板,从而只检查其他模板是否有冲突。

3. **`.map(CarriageEntity::getAssociatedCity)`**:
   - `map` 方法用于将流中的每个元素映射为另一个形式。在这里,每个 `CarriageEntity` 对象被映射为它的 `associatedCity` 字段值。
   - `CarriageEntity::getAssociatedCity` 是一个方法引用,表示对 `CarriageEntity` 对象的 `getAssociatedCity` 方法的引用。

4. **`.map(associatedCity -> StrUtil.split(associatedCity, ','))`**:
   - 这个 `map` 操作进一步处理每个 `associatedCity` 字符串,将其按照逗号 `,` 分割为一个 `List<String>`。
   - `StrUtil.split` 是一个实用方法,用于将字符串按照指定的分隔符分割成列表。

5. **`.flatMap(StreamUtil::of)`**:
   - `flatMap` 方法用于将每个元素映射为一个流,然后将多个流合并为一个流。换句话说,它“展开”了之前的列表集合。
   - 在这里,每个 `associatedCity` 字符串列表都被展开为单独的城市字符串,然后所有这些字符串被合并为一个大的流。
   - `StreamUtil::of` 将字符串列表转换为流。

6. **`.collect(Collectors.toList())`**:
   - `collect` 方法用于将流的结果收集起来,并最终转换为一个集合。在这里,`Collectors.toList()` 将流中的所有城市字符串收集到一个 `List<String>` 中。

三、 流 (Stream) 的使用方法

Java 8 引入的流 (`Stream`) API 是一种处理数据集合的声明性方式,它提供了许多强大的功能,使得代码更加简洁、可读和高效。以下是流的一些关键特性和方法:

1. **创建流**:
   - 可以从集合(如 `List`、`Set`)、数组、文件、生成器等创建流。
   - 例如,`Stream.of(...)` 或 `list.stream()` 可以创建流。

2. **中间操作**:
   - 中间操作会返回一个新的流,这些操作是惰性求值的,意味着它们不会立即执行,直到遇到终端操作。
   - 常用的中间操作包括 `filter`(过滤)、`map`(映射)、`flatMap`(展平映射)、`sorted`(排序)、`distinct`(去重)等。

3. **终端操作**:
   - 终端操作会触发流的处理,并返回一个结果,如 `collect`(收集)、`forEach`(遍历)、`reduce`(归约)、`count`(计数)等。
   - 一旦执行终端操作,流就会被“消耗”并且不能再使用。

4. **短路操作**:
   - 有些终端操作会在满足条件后立即停止流的处理,如 `anyMatch`、`allMatch`、`noneMatch`、`findFirst`、`findAny`。

标签:CarriageEntity,map,associatedCity,StremUtil,使用,字符串,操作,StreamUtil
From: https://blog.csdn.net/qq_46637011/article/details/141185252

相关文章

  • 《DNK210使用指南 -CanMV版 V1.0》第十九章 machine.PWM类实验
    第十九章machine.PWM类实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正......
  • 图像识别,训练数据集---GPU篇 3090免费使用
     大家一般都在window上训练yolo等一些深度学习模型,会发现很慢或者说GPU显存不够用而云GPU平台则解决了一系列该问题深度学习目标检测交流群1:985499650yolo2D3D目标检测行为识别交流群2:782537412接下来以该平台为例---有一些免费的3090,4090可以用(24G):https://cloud.lanyun.n......
  • 使用前端js库pica压缩图片
    pica浏览器中的高质量图像大小调整在浏览器中调整图像大小,无需像素化,速度相当快。自动选择最好的可用技术:webworkers、webassembly、createImageBitmap、纯JS。简单使用<scriptsrc="./plugins/pica.min.js"></script><script>functionresizeImage(img_path,file_name)......
  • Optional类的使用
    Optional类的使用目录Optional类的使用基本使用常用方法示例代码使用场景注意事项基本使用Optional类提供了几种静态方法来创建Optional实例:Optional.empty():创建一个空的Optional实例。Optional.of(Tvalue):创建一个包含非空值的Optional实例。Optional.ofNullable......
  • 阿里云矢量图标库的使用
    关于图标,前端工程师接触的不算少的了。虽然不少公司都会有自己的前端ui工程师设计图标,各类ui库也会有自己的图标库,但如果你是个人开发或者是学校的同学,再或者你们没有ui设计图标,那么你就能运用到我的方案。官网地址:iconfont-阿里巴巴矢量图标库这个不用担心,注册就能免费使用,......
  • 如何使用Zabbix API批量修正主机名称
    先说为什么要修正?这其实源自于Ansible安装zabbixagent的一个小Bug。有小伙伴发现,利用ansible批量安装zabbixagent后,zabbix系统上显示的主机名出错了,主机显示的名称都变成了操作系统的IP(如下图),这在一定程度增加了维护难度。如果一台一台去修改和校正主机名将会非常耗费时间,这......
  • windeployqt.exe的使用与避坑(windows平台)
    1.介绍windeployqt.exe是Qt自带的工具,用于创建应用程序发布包。简单来说,这个工具可以自动地将某程序依赖的库、资源拷贝到其所在目录,防止程序在其他电脑上运行报找不到库的错误。这里贴上官方文档:https://doc.qt.io/qt-5/windows-deployment.html本文适用于Windows+Visual......
  • Python轻量级 NoSQL 数据库之tinydb使用详解
    概要在现代应用开发中,使用数据库来存储和管理数据是非常常见的需求。对于简单的数据存储需求,关系型数据库可能显得过于复杂。TinyDB是一个纯Python实现的轻量级NoSQL数据库,专为嵌入式场景设计,适用于小型项目、原型开发和教学等场景。本文将详细介绍TinyDB库,包括其安......
  • Python之sys.argv功能使用详解
    概要在Python编程中,命令行参数是与程序交互的重要方式之一。通过命令行参数,用户可以在运行脚本时传递输入值,从而影响程序的行为。Python提供了一个非常方便的模块——sys,其中的sys.argv列表可以轻松地获取命令行参数。在本文中,将深入探讨sys.argv的使用方法,结合实际示例展示......
  • Python编程中不可忽视的docstring使用详解
    概要在Python编程中,代码的可读性和可维护性至关重要。除了清晰的命名和结构良好的代码外,良好的文档字符串(docstring)也是确保代码易于理解和使用的关键工具。docstring是Python中用于记录模块、类、方法和函数行为的字符串,帮助开发者和用户快速了解代码的功能和用法。本文将......