Java8新特性-流式操作

news2024/12/22 18:45:41

在Java8中提供了新特性—流式操作,通过流式操作可以帮助我们对数据更快速的进行一些过滤、排序、去重、最大、最小等等操作并且内置了并行流将流划分成多个线程进行并行执行,提供更高效、快速的执行能力。接下来我们一起看看Java8为我们新增了哪些便捷呢?

目录

什么是集合的流式操作?

对集合做流式操作的三个步骤?

映射

flatMap:相同元素合并或拆分h1

map:将源数据转换成需要的数据类型或者进行指定的操作

toMap:转换成需要的map集合

并行流

什么是并行流?

为什么需要并行流?

parallel():并行流

findAny和findFirst的区别是什么?

findAny:最先抢到cpu时间片的线程它所处理的数据段中的第一个数据,串行流结果等同于findFirst

findFirst:流中的第一个元素(指集合中的第一个),并行流或串行流结果一致


什么是集合的流式操作?

流式操作:不是一个数据结构,不负责任何的数据存储

更像是一个迭代器,有序的获取到数据源中的每一个数据,并且可以对这些数据进行一些操作

流失操作的每一个方法,返回值都是返回的流本身

翻译:可以把流比作一个管道,管道中有很多过滤网

对集合做流式操作的三个步骤?

获取数据源:集合、数组

对数据进行处理的过程:过滤、排序、映射……(中间操作)

对流中数据的整合:转成集合、数量(最终操作)


映射

方法

  • flatMap:相同元素合并或拆分h1
  • map:将源数据转换成需要的数据类型或者进行指定的操作
  • toMap:转换成需要的map集合

实践说明

  • flatMap:相同元素合并或拆分h1

  • map:将源数据转换成需要的数据类型或者进行指定的操作

要求输出内容:h,e,l,l,o,w,o,r,l,d

public static void main(String[] args) {
        String[] array = {"hello", "world"};
        System.out.println(Arrays.stream(array).map(ele -> ele.split("")).flatMap(Arrays::stream).collect(Collectors.toList()));
}

参考博客:

flatMap():Java8 FlatMap的使用_java flatmap_杨幂等的博客-CSDN博客

Map():这么简单,还不会使用java8 stream流的map()方法吗?_stream流的map方法_欧子有话说的博客-CSDN博客

toMap:转换成需要的map集合

public static void main(String[] args) {
       Stream<Person> stream = Data.getData().stream();

        Map<String, Integer> maps = stream.collect(Collectors.toMap(Person::getName, Person::getScore));
        System.out.println(maps);
}


并行流

什么是并行流?

把流分成多个块,并行操作

为什么需要并行流?

集合做重复的操作,如果使用串行执行会相当耗时,因此一般会采用多线程来加快, Java8的提供了并发执行能力

方法

  • parallel():并行流

  • findAny:最先抢到cpu时间片的线程它所处理的数据段中的第一个数据,串行流结果等同于findFirst

  • findFirst:流中的第一个元素(指集合中的第一个),并行流或串行流结果一致

实战说明

parallel():并行流

import com.example.Data;

import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.LongStream;

/**
 * @BelongsProject: StreamOperate
 * @BelongsPackage: PACKAGE_NAME
 * @CreateTime: 2023-05-01  21:12
 * @Description: TODO
 * @Version: 1.0
 */
public class ParalleStream {
    public static void main(String[] args) {
				long start = System.currentTimeMillis();
        LongStream.rangeClosed(0L, 50000000000L).parallel().reduce(Long::sum);
        long end = System.currentTimeMillis();
        System.out.println(end - start);
    }
}

参考博客:Java 8 并行流(Parallel Stream) 介绍 - 简书

findAny和findFirst的区别是什么?

  • findAny:最先抢到cpu时间片的线程它所处理的数据段中的第一个数据,串行流结果等同于findFirst

  • findFirst:流中的第一个元素(指集合中的第一个),并行流或串行流结果一致

对于并行流中,findAny比findFirst效率更高

import com.example.Data;

import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.LongStream;

/**
 * @BelongsProject: StreamOperate
 * @BelongsPackage: PACKAGE_NAME
 * @CreateTime: 2023-05-01  21:12
 * @Description: TODO
 * @Version: 1.0
 */
public class ParalleStream {
    public static void main(String[] args) {
				System.out.println(Data.getData().parallelStream().findFirst());
        System.out.println(Data.getData().stream().findFirst());

        System.out.println(Data.getData().stream().findAny());
        System.out.println(Data.getData().parallelStream().findAny());
    }
}
 

如果有想要交流的内容欢迎在评论区进行留言,如果这篇文档受到了您的喜欢那就留下你点赞+收藏+评论脚印支持一下博主~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/482173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python基础合集 练习19(类与对象3(多态))

多态 class Horse: def init(self, name) -> None: self.name name def fature(self):return 父亲-----马的名字: {0}.format(self.name)def mover(self):print(马儿跑起来很潇洒)class Monkey: def init(self, name) -> None: self.name name def fature(self):ret…

《用于准确连续非侵入性血压监测的心跳内生物标志物》阅读笔记

目录 0 基础知识 1 论文摘要 2 论文十问 3 实验结果 4 论文亮点与不足之处 5 与其他研究的比较 6 实际应用与影响 7 个人思考与启示 参考文献 0 基础知识 非侵入性是指在进行医学检查或治疗时&#xff0c;不需要切开皮肤或穿刺体内组织&#xff0c;而是通过外部手段进…

【VQGAN论文精读】Taming Transformers for High-Resolution Image Synthesis

【VQGAN论文精读】Taming Transformers for High-Resolution Image Synthesis 0、前言Abstract1. Introduction2. Related Work3. Approach3.1. Learning an Effective Codebook of Image Constituents for Use in Transformers学习一个有效的图像成分的Codebook为了在Transfor…

高性能:负载均衡

目录 什么是负载均衡 负载均衡分类 服务端负载均衡 服务端负载均衡——软硬件分类 服务端负载均衡——OSI模型分类 客户端负载均衡 负载均衡常见算法 七层负载均衡做法 DNS解析 反向代理 什么是负载均衡 将用户请求分摊&#xff08;分流&#xff09; 到不同的服务器上…

小记Java调用C++开发的动态链接库(DLL)

一、背景 五一快乐吖&#xff01;死肥宅正趁着五一这段时间&#xff0c;努力提升自己&#xff01; 最近使用Java拦截Windows系统中一些默认事件时&#xff0c;发现了一些瓶颈。 我用Java操作浏览器、用Java最小化其他应用窗口&#xff0c;但是我发现这个操作&#xff0c;他都…

【Unity-UGUI控件全面解析】| InputField 输入框组件详解

🎬【Unity-UGUI控件全面解析】| InputField 输入框组件详解一、组件介绍二、组件属性面板2.1 Content Type(内容类型)三、代码操作组件四、组件常用方法示例4.1 代码限制输入字符4.2 校验文本输入格式4.3 校验输入文本长度💯总结🎬 博客主页:https://xiaoy.blog.csdn.…

话说【永恒之塔sf】里面最有前途的职业:商人

如果有人问我永恒之塔里面什么职业最有前途&#xff01;那我告诉你就是商人&#xff01; 做一个NB商人比拥有一身牛b装备要更有成就感。 在老区由于进入的比较晚&#xff0c;所以最后随了大流被淹死在千万基纳中。为了证明商人在永恒之塔是钱途无量的&#xff0c;我转到了新区—…

快解析动态域名解析,实现外网访问内网数据库

今天跟大家分享一下如何借助快解析动态域名解析&#xff0c;在两种特定网络环境下&#xff0c;实现外网访问内网mysql数据库。 第1种网络环境&#xff1a;路由器分配的是动态公网IP&#xff0c;且有路由器登录管理权限。如何实现外网访问内网mysql数据库&#xff1f; 针对这种…

IDEA2022版教程上()

0、前景摘要 0.1 概览 0.2 套课程适用人群 初学Java语言&#xff0c;熟悉了记事本、EditPlus、NotePad或Sublime Text3等简易开发工具的Java初学者熟练使用其他Java集成开发环境&#xff08;IDE&#xff09;&#xff0c;需要转向IDEA工具的Java工程师们关注IDEA各方面特性的J…

Hadoop大数据分析技术(伪分布式搭建)

一.安装JDK和配置SSH免密登录 &#xff08;1&#xff09;准备软件 &#xff08;2&#xff09;解压压缩包 tar -zxvf jdk-8u221-linux-x64.tar.gz &#xff08;3&#xff09;在此处我们配置系统环境变量&#xff0c;使用命令&#xff1a; vim /etc/profile &#xff08;4&#x…

Python入门教程(高级版)

Python用了好几年了&#xff0c;但似乎一直没 “系统入门” 过&#xff08;o(╯□╰)o&#xff09;。今年&#xff08;2023年&#xff09;趁着五一假期&#xff0c;我做了一次相对完整的 “入门” ——本文是这次学习历程的详细记录。 目录 1 Python基础1.1 Python1.1.1 认识Py…

Oracle VM VirtualBox安装centos7步骤 for win10

目录 1.安装VirtualBox 2.安装vagrant 3.安装centos7 4.查看网络与百度和物理机连通情况 5.设置IP 1.安装VirtualBox 下载的链接:Downloads – Oracle VM VirtualBox 2.安装vagrant 根据自己的操作系统选择对应的版本。 Install | Vagrant | HashiCorp Developer 我的P…

asp.net+sqlserver旅游网站zjy99A2

1&#xff0e;系统登录&#xff1a;系统登录是用户访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括用户名、密码和验证码&#xff0c;然后对登录进来的用户判断身份信息&#xff0c;判断是管理员用户还是普通用户。 2&#xff0e;系统用户管理&#xff1a;不管是…

redis使用总结

目录 redis安装与登录redis 持久化RDB(Redis DataBase)AOF(Append Only File)RDB-AOF混合持久纯缓存模式 redis 的 keyredis 的数据类型和常见应用场景StringListHashMapSet集合ZSet有序集合bitmap位图HyperLogLog基数统计GEO 地理空间Stream 流bitfiled redis 事务事务的正常执…

《基于EPNCC的脉搏信号特征识别与分类研究》阅读笔记

目录 一、论文摘要 二、论文十问 三、论文亮点与不足之处 四、与其他研究的比较 五、实际应用与影响 六、个人思考与启示 参考文献 一、论文摘要 为了快速获取脉搏信号的完整表征信息并验证脉搏信号在相关疾病临床诊断中的敏感性和有效性。在本文中&#xff0c;提出了一…

ChatGPT根据销售数据、客户反馈、财务报告,自动生成报告,并根据不同利益方的需要和偏好进行调整?

该场景对应的关键词库&#xff08;24个&#xff09;&#xff1a; 汇报对象身份&#xff08;下属、跨部门平级、领导&#xff09;、销售数据&#xff08;销售额、销售量、销售渠道&#xff09;、财务报告&#xff08;营业收入、净利润、成本费用&#xff09;、市场分析&#xf…

Vulkan实战之验证层

文章目录 验证层是什么&#xff1f;使用验证层消息回调调试实例的创建和销毁测试配置最终代码 验证层是什么&#xff1f; Vulkan API是围绕最小化驱动程序开销的想法设计的&#xff0c;该目标的表现之一是默认情况下API中的错误检查非常有限。即使是像将枚举设置为不正确的值或…

STM32 系列 DAC的介绍与使用

STM32网上资料多&#xff0c;对自己来说基本的使用也是很简单的&#xff0c; 我的STM32专栏并没有什么系统的基础教学&#xff0c;基本上是某个项目用到了&#xff0c;或者产品使用过程出过问题 才会来记录一下&#xff0c;正好用到了 DAC &#xff0c;一般产品还用得不多&…

【Unity入门】23.简单物理系统

【Unity入门】简单物理系统 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity入门系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;重力系统 &#xff08;1&#xff09;Rigidbody组件 Unity里面有提供符合我们常规认知的物理系统组件Physics&…

GDKOI 2023游记总结

不知觉就咕了1.5个月 在回忆 2021 年那个刚步入初中的懵懂孩童参加 GDOI 的惊喜中感慨初中时光的飞逝。 2021 GDOI 普及组游记 Day - ∞ \infty ∞ 去年因为疫情取消了&#xff0c;今年难得重新举办&#xff0c;珍惜每一次机会吧。 前年的地点订在深圳耀华学校&#xff0c;忘…