iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java 8:Stream API 流式操作
  • 931
分享到

Java 8:Stream API 流式操作

javapython 2023-08-16 16:08:29 931人浏览 安东尼
摘要

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Java 8:Stream api Java 8 中的 Stream API 是一组

在这里插入图片描述

💗wei_shuo的个人主页

💫wei_shuo的学习社区

🌐Hello World !


Java 8:Stream api

Java 8 中的 Stream API 是一组用于对集合数据进行处理的新特性;提供一种以声明式风格对集合进行操作的方式,简化集合的处理,使得代码更加简洁、优雅,并且能够更高效地处理数据;

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等;元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果

+--------------------+       +------+   +------+   +---+   +-------+| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|+--------------------+       +------+   +------+   +---+   +-------+

流程转换为 Java 代码为:

List transactionsIds = widgets.stream()             .filter(b -> b.getColor() == RED)             .sorted((x,y) -> x.getWeight() - y.getWeight())             .mapToInt(Widget::getWeight)             .sum();

特性

声明式编程风格:Stream API 提供了类似于 sql 查询的声明式编程方式,通过链式调用一系列方法来对数据进行操作,而不是显式地编写循环或临时变量。这使得代码更加简洁、易读和易于理解

惰性求值:Stream 是惰性求值的,即只有在终止操作时才会真正执行;中间操作(如 filter、map、sorted 等)只是定义了数据流的处理步骤,而不会立即执行;这样可以优化处理过程,避免不必要的计算,提高性能

函数式接口支持:Stream API 需要与函数式接口(Functional Interface)一起使用;函数式接口是只包含一个抽象方法的接口,Lambda 表达式可以作为函数式接口的实例进行传递;这种支持使得 Stream API 能够充分发挥函数式编程的优势

生成流

Java 8 中, 集合接口有两个方法来生成流

stream():为集合创建串行流

parallelStream() −:为集合创建并行流

List strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");List filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

strings 列表创建了一个流,通过 stream() 方法将列表转换成了一个流;然后,使用 filter 方法传递一个 Lambda 表达式来筛选(过滤)不满足条件的元素;在这里,Lambda 表达式 string -> !string.isEmpty() 检查字符串是否非空;只有在字符串不为空的情况下,该元素会被保留在流中;最后,使用 collect 方法,结合 Collectors.toList() 收集器,将符合条件的元素收集到一个新的列表 filtered 中

流式操作

forEach

Stream 提供了新的方法 forEach 来迭代流中的每个数据:以下代码片段使用 forEach 输出10个随机数:

ints() 方法用于生成一个无限的随机整数流

Random random = new Random();random.ints().limit(10).forEach(System.out::println);

map

map 方法用于映射每个元素到对应的结果:以下代码片段使用 map 输出了元素对应的平方数

List numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);// 获取对应的平方数List squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

filter

filter 方法用于通过设置的条件过滤出元素:以下代码片段使用 filter 方法过滤出空字符串

Liststrings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");// 获取空字符串的数量long count = strings.stream().filter(string -> string.isEmpty()).count();

limit

limit 方法用于获取指定数量的流:以下代码片段使用 limit 方法打印出 10 条数据

Random random = new Random();random.ints().limit(10).forEach(System.out::println);

sorted

sorted 方法用于对流进行排序:以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序

Random random = new Random();random.ints().limit(10).sorted().forEach(System.out::println);

并行(parallel)程序

parallelStream 是流并行处理程序的代替方法:以下实例我们使用 parallelStream 来输出空字符串的数量

List strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");// 获取空字符串的数量long count = strings.parallelStream().filter(string -> string.isEmpty()).count();

Collectors

Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素:Collectors 可用于返回列表或字符串

Liststrings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");List filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList()); System.out.println("筛选列表: " + filtered);String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));System.out.println("合并字符串: " + mergedString);

统计

产生统计结果的收集器;它们主要用于int、double、long等基本类型上,它们可以用来产生类似如下的统计结果

List numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics(); System.out.println("列表中最大的数 : " + stats.getMax());System.out.println("列表中最小的数 : " + stats.getMin());System.out.println("所有数之和 : " + stats.getSum());System.out.println("平均数 : " + stats.getAverage());

map 操作

Stream API 中三种常见的 map 操作:mapmapToIntflatMap

  • map:用于将流中的元素映射为另一种类型的流。例如,将一个对象流中的每个对象映射为对象的某个属性值组成的流
  • mapToInt:用于将流中的元素映射为 IntStream,即基本类型 int 的流。它通常用于将流中的元素映射为整数值
  • flatMap:用于将流中的每个元素映射为一个流,然后将这些流连接成一个单一的流。它通常用于扁平化处理嵌套的流结构

案例

systemApplicationTypeRepo.list(new QueryWrapper().orderByAsc(SystemApplicationTypeCol.ID))                .stream().map(bean -> new ResCommonIdNameCode(bean.getId(), bean.getName(), bean.getName())).collect(Collectors.toList()
systemApplicationTypeRepo.list(...):这部分代码使用了一个名为 systemApplicationTypeRepo 的仓库(Repository),通过调用 list 方法来查询数据库中的数据;list 方法接受一个查询条件对象 QueryWrapper 作为参数,用于指定查询条件new QueryWrapper().orderByAsc(SystemApplicationTypeCol.ID):这是创建一个查询条件对象的过程;QueryWrapper 是 mybatis-Plus 提供的用于构建查询条件的工具;orderByAsc(SystemApplicationTypeCol.ID) 表示按照 SystemApplicationType 实体类中 ID 字段的升序进行排序。.stream():这将查询结果转换为一个 Stream 对象,便于后续的操作.map(bean -> new ResCommonIdNameCode(bean.getId(), bean.getName(), bean.getName())):这部分使用 map 操作将查询结果的每个 SystemApplicationType 对象映射为 ResCommonIdNameCode 对象;ResCommonIdNameCode 是一个自定义的类,构造函数接受 id、name 和 code 作为参数,用于创建一个新的对象.collect(Collectors.toList()):最后,使用 collect 方法将 Stream 对象收集为 List,即最终的结果列表
noticeResponses.stream()                .sorted(Comparator.comparing(SystemNoticeResponse::getReadStatus)                        .thenComparing(Comparator.comparing(SystemNoticeResponse::getCreateAt).reversed()))                .collect(Collectors.toList());
.stream():将 noticeResponses 列表转换为一个 Stream 对象,使其能够使用 Stream API 提供的操作.sorted(...):这是一个中间操作,用于对流中的元素进行排序;使用 Comparator.comparing(...) 方法创建了一个比较器,用于指定排序的规则;首先,按照 SystemNoticeResponse 对象的 readStatus 字段进行升序排序;.thenComparing(...) 表示如果 readStatus 相同,则按照 createAt 字段进行降序排序(使用 reversed() 方法).collect(Collectors.toList()):最后,使用 collect 方法将排序后的 Stream 对象收集为一个新的 List,即排序后的 noticeResponses 列表

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


在这里插入图片描述

来源地址:https://blog.csdn.net/weixin_62765017/article/details/131815956

--结束END--

本文标题: Java 8:Stream API 流式操作

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

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

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

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

下载Word文档
猜你喜欢
  • Java 8:Stream API 流式操作
    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Java 8:Stream API Java 8 中的 Stream API 是一组...
    99+
    2023-08-16
    java python
  • Java 8 Stream API 基础教程
    作者:禅与计算机程序设计艺术 1.简介 1995年4月1日,Java编程语言问世,被广泛应用于各个领域。Java平台提供了面向对象的编程能力、安全性、健壮性和可移植性。作为第一个支持动态类型和自动内存...
    99+
    2023-10-09
    自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
  • 探索 Java 8 中的 Stream 流:构建流的多种方式
    目录 前言  什么是 Stream 流?  创建 Stream 流  1. 从集合创建 Stream  2. 从数组创建 Stream 3. 使用 Stream.of 创建 Stream  4. 使用 Stream.gener...
    99+
    2024-01-21
    java 开发语言
  • java的Stream API终端操作示例分析
    这篇文章主要介绍“java的Stream API终端操作示例分析”,在日常操作中,相信很多人在java的Stream API终端操作示例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”j...
    99+
    2023-06-29
  • Java 8 Stream流的原理是什么
    Java 8 Stream流的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言:Stream 使用一种类似用 SQL 语句从数据库查询数据的直观...
    99+
    2023-06-22
  • Java stream 分组操作
    根据单/多字段分组 单字段分组可以直接使用指定字段,多字段分组则采用拼接Key的形式 单字段: //单字段分组Map singleAttr = list.stream().collect( Collectors...
    99+
    2023-08-31
    java stream
  • java Stream去重操作
     1.根据对象的某个属性去重: 网上找的stream流去重方法,可以根据类的某个属性去重,这里记录一下 public static Predicate distinctNotByKey(Function keyExtract...
    99+
    2023-09-01
    java python linux
  • Java8中Stream流式操作指南之入门篇
    目录简介正文1. 流是什么2. 老板,上栗子3. 流的操作步骤4. 流的特点5. 流式操作和集合操作的区别:总结简介 流式操作也叫做函数式操作,是Java8新出的功能 流式操作主要用...
    99+
    2024-04-02
  • 49天精通Java,第42天,java stream流详解,从集合遍历,看stream流操作
    目录 专栏导读 一、遍历list 二、Stream流有啥优势? 1、很屌、很帅 2、执行流时,并没有修改流背后的集合 3、简化代码 4、提高效...
    99+
    2023-08-18
    程序人生 学习 java8 Stream java18 低代码 原力计划
  • Java Stream流实现多字段分组groupingBy操作
    近期的项目里,遇到一个需求:对于含有多个元素的List,按照其中的某几个属性进行分组,比如Report::getPersonID、Report::getSchoolYear、Report::getDa...
    99+
    2023-10-28
    java
  • Java8中的Stream 流实践操作
    目录1 前言2 Stream 的分类3 Stream 的操作3.1 创建流的方式3.2 流的中间操作3.3 流的终止操作总结1 前言 Stream 是 java8 中处理集合的抽象概...
    99+
    2024-04-02
  • Stream流中的groupingBy分组操作
     code: //根据医院编号,查询医院所有科室信息 Department departmentQuery = new Department(); departmentQuery.setHoscode(hoscode); Example ...
    99+
    2023-09-01
    java mysql sql
  • java基础理论Stream管道流Map操作示例
    目录一、回顾Stream管道流map的基础用法二、处理非字符串类型集合元素三、再复杂一点:处理对象数据格式转换四、flatMap一、回顾Stream管道流map的基础用法 最简单的需...
    99+
    2024-04-02
  • Java8中Stream API操作的示例分析
    这篇文章主要介绍了Java8中Stream API操作的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.什么是StreamAPI?Java8中有两大最为重要的改变。...
    99+
    2023-06-25
  • Java Stream流的常见生成和操作方法总结
    目录一、Stream流简单示例二、Stream流常见生成方式三、Stream流中间操作方法filter代码示例limit&skip代码示例concat&distinc...
    99+
    2024-04-02
  • Java8-Stream流操作List去重问题
    目录Java8Stream流操作List去重List列表运用Java8的stream流按某字段去重问题思路Java8Stream流操作List去重 根据属性去重整体去重使用 dist...
    99+
    2022-11-16
    Java8 Stream流 Java8 List去重 Java8 Stream List去重
  • Java Stream API 使代码更出色的操作完全攻略
    目录前言示例示例 1:使用 filter() 方法过滤奇数示例 2:使用 map() 方法将每个字符串转换为大写示例 3:使用 flatMap() 方法将嵌套的列表展平为一个列表示例...
    99+
    2023-05-15
    Java Stream API Java Stream API 操作
  • Stream流 - 获取Stream和转换操作(含基本数据类型流)
    Stream概述 Stream流是jdk1.8对集合对象功能的增强,可以通过将集合转换为流模型,通过声明的方式对集合中的每个元素进行一系列并行或者串行的流水线操作。 Stream只要给出对其包含的元素执行什么操作,Stream就会隐式地在内...
    99+
    2023-08-19
    java 前端 html
  • java Stream怎么操作元素
    本篇内容主要讲解“java Stream怎么操作元素”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java Stream怎么操作元素”吧!说明java.util.Stream代表了一系列能够执行...
    99+
    2023-06-30
  • Java Stream API使代码更出色的操作方法是什么
    这篇“Java Stream API使代码更出色的操作方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作