首页 > 其他分享 >【JDK8新特性】Stream API 结合Lambda语法在项目中的实战应用

【JDK8新特性】Stream API 结合Lambda语法在项目中的实战应用

时间:2024-09-17 21:21:10浏览次数:11  
标签:... Stream 对象 元素 流中 API JDK8 集合

Lambda语法回顾

在JDK 8中,Lambda表达式支持的引用类型主要有以下几种,如表1所示。

种类

Lambda表达式示例

对应的引用示例

类名引用普通方法

(x,y,...)-> 对象名x.类普通方法名(y,...)

类名::类普通方法名

类名引用静态方法

(x,y,...) -> 类名.类静态方法名(x,y,...)

类名::类静态方法名

对象名引用方法

(x,y,...) -> 对象名.实例方法名(x,y,...)

对象名::实例方法名

构造器引用

(x,y,...) -> new 类名 (x,y,...)

类名::new

表1 Lambda表达式对普通方法和构造方法的引用形式

Stream语法回顾

关于为什么使用Stream接口

在开发中,多数情况下会涉及到对集合、数组中元素的操作,在JDK 8之前都是通过普通的循环遍历出每一个元素,然后还会穿插一些if条件语句选择性的对元素进行查找、过滤、修改等操作,这种原始的操作方法虽然可行,但是代码量较大并且执行效率较低。 

该接口可以将集合、数组的中的元素转换为Stream流的形式,并结合Lambda表达式的优势来进一步简化集合、数组中元素的查找、过滤、转换等操作,这一新功能就是JDK 8中的聚合操作。

Stream流的常用方法

方法声明

功能描述

Stream<T> filter(Predicate<? super T> predicate)

将指定流对象中的元素进行过滤,并返回一个子流对象

Stream<R> map(Function<? super T, ? extends R> mapper)

将流中的元素按规则映射到另一个流中

Stream<T> distinct()

删除流中重复的元素

Stream<T> sorted()

将流中的元素按自然顺序排序

Stream<T> limit(long maxSize)

截取流中元素的长度

Stream<T> skip(long n)

丢弃流中前n个元素

static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)

将两个流对象合并为一个流

long count()

统计流中元素的个数

R collect(Collector<? super T, A, R> collector)

将流中的元素收集到一个容器中(如集合)

Object[] toArray()

将流中的元素收集到一个数组中

void forEach(Consumer<? super T> action)

将流中的元素进行遍历

表2 Stream流的常用方法 

新特性在项目中的应用

在程序中,使用聚合操作没有绝对的语法规范,根据实际操作流程,主要可以分为以下3个步骤:

(1)将原始集合或者数组对象转换为Stream流对象;

● 所有的Collections集合都可以使用stream()静态方法获取Stream流对象;

● Stream接口的of()静态方法可以获取基本类型包装类数组、引用类型数组和单个元素的Stream流对象;

● Arrays数组工具类的stream()静态方法也可以获取数组元素的Stream流对象。

(2)对Stream流对象中的元素进行一系列的过滤、查找等中间操作(Intermediate Operations),然后仍然返回一个Stream流对象;

(3)对Stream流进行遍历、统计、收集等终结操作(Terminal Operation),获取想要的结果。一个Stream流对象可以连续进行多次中间操作,仍会返回一个流对象,但一个流对象只能进行一次终结操作,并且一旦进行终结操作后,该流对象就不复存在了。

小提示:

在JDK 8中,只针对单列集合Collections接口对象提供了stream()静态方法获取Stream流对象,并未对Map集合提供相关方法获取Stream流对象,所以想要用Map集合创建Stream流对象必须先通过Map集合的keySet()、values()、entrySet()等方法将Map集合转换为单列Set集合,然后再使用单列集合的stream()静态方法获取对应键、值集合的Stream流对象。

  1. 从用户列表中根据用户相似度获取前num个用户ID并排序。 

     2. 将获取到的用户信息脱敏保存到finalUserList并且返回。

标签:...,Stream,对象,元素,流中,API,JDK8,集合
From: https://blog.csdn.net/2303_76696898/article/details/142318465

相关文章

  • 百度地图,您所使用的地图JS API版本过低,解决方法
    提示信息“您所使用的地图JSAPI版本过低,已不再维护,为保证地图基本功能正常使用,请尽快升级到最新版地图JSAPI”表明当前使用的地图JSAPI版本已经过时,并且不再受到官方的支持和维护。为了确保地图功能的正常使用,需要升级到最新版本的地图JSAPI。解决办法1.确认当前使用的地......
  • APIO2016 烟火表演
    传送门给定一棵树,带边权。\(1\)的代价可以使某边权\(\pm1\)。求最小代价使从根到叶子距离都相等。\(n\le3\times10^5,w_e\le10^9\)。\(f_u(x)\)表示\(u\)的子树内把\(u\)到叶子的距离都变成\(x\)的最小代价。\(F_u(x)\)表示\(u\)的子树内把\(fa[u]\)到叶子......
  • Qt加载天地图离线api开发包/从官网趴地图js代码/费了九牛二虎之力终于搞定
    一、前言说明网上关于如何趴天地图离线api文件的文章,只有少量的两三篇,而且几乎没有说全和说对,搞得评论也是一片懵逼,这里不行那你不行,思路可以借鉴就是。索性花了点时间,自己研究了如何从官网一步步趴下来js文件,最终所有离线能使用的功能全部搞定,也根本不会有http等访问的情况出现,......
  • Spark Streaming基础概论
    1.简介1.1什么是SparkStreaming?SparkStreaming是ApacheSpark的一个扩展模块,专门用于处理实时数据流。它通过将数据流切分为一系列小批次(微批次)进行处理,使得开发者能够使用与批处理相同的API来处理流数据。这种微批处理的架构允许SparkStreaming高效地处理实......
  • D50 树的直径 P3629 [APIO2010] 巡逻
    视频链接: P3629[APIO2010]巡逻-洛谷|计算机科学教育新生态(luogu.com.cn)//两次DFS+树形DPO(n)#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=100005;intidx=1,head[N],to[N<<1],ne[N<<1],w[N<......
  • Java基础:Api 文档注释,字符串种类,String字符串创建,特点及常用方法
    #1API文档注释*有三种注释 1.`单行注释 //` 2.`多行注释/*  */` 3.`文档注释/** */`*文档注释一般建议写在类,属性和方法上。jdk提供了javadoc.exe工具 对程序的所有类及属性和方法生成一个说明文档 :API文档*API:ApplicationProgramInte......
  • 828华为云征文 | 云服务器Flexus X实例:one-api 部署,支持众多大模型
    目录一、one-api介绍二、部署one-api2.1拉取镜像2.2部署one-api三、运行one-api3.1添加规则3.2运行one-api 四、添加大模型API4.1添加大模型API五、总结本文通过 Flexus云服务器X实例部署one-api。Flexus云服务器X实例是新一代面向中小企业和开发......
  • 基于通信协议与技术架构的API接口分类探讨
    API的全称是“ApplicationProgrammingInterface”,意为“应用程序编程接口”API接口的分类:按照技术分WebAPI:基于Web的API,通过HTTP和HTTPS协议与应用程序交互,如RESTfulAPI和SOAPAPI。云API:用于在云计算环境中管理和操作云服务,例如AmazonWebServicesAPI和MicrosoftA......
  • 文本多语言 AI 摘要 API 数据接口
    文本多语言AI摘要API数据接口文本/文本摘要AI生成文本摘要AI处理/智能摘要。1.产品功能支持多语言摘要生成;支持长文本处理;基于AI模型,持续迭代优化;不存储PDF文件,处理完即释放,保证您的文档安全;全接口支持HTTPS(TLSv1.0/v1.1/v1.2/v1.3);全面兼容Ap......
  • 不服不行,这才是后端API接口应该有的样子!
    在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后端人员瞧不起前端人员,那现在后端人员要重新认识一下前端,前端已经很成体系了)。一般系统的大......