java8中一个极其强悍的新特性Stream(非常实用)

ADS1299寄存器配置与应用实战指南 本文提供了ADS1299高精度生物电信号采集芯片的寄存器配置与应用实战指南。详细解析了采样率、增益、转换模式等核心寄存器的设置方法,并分享了数据读取、高级功能配置及常见问题的调试心得,帮助开发者快速掌握ADS1299的配置技巧,实现稳定的ECG/EEG信号采集。 阅读详情

本博客系转载:https://zhuanlan.zhihu.com/p/97493325

1.Stream语法讲解

Stream执行流程很简单,主要有三个,首先创建一个Stream,然后使用Stream操作数据,最后终止Stream。有点类似于Stream的生命周期。下面我们根据其流程来一个一个讲解。
前提准备,首先我们创建一个Student类,以后我们每次都是操作这个类。

public class Student {
    private Integer id;
    private String name;
    private Integer age;
    private Double score;
    public Student() {
    }
    public Student(Integer id, String name, Integer age, Double score) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.score = score;
    }
    //getter和setter方法
    //toString方法
}

2.创建一个Stream

2.1.通过一个集合创建Stream

@Test
public void test1(){
    List<Student> studentList = StudentData.getStudents();
    //第一种:返回一个顺序流
    Stream<Student> stream = studentList.stream();
    //第二种:返回一个并行流
    Stream<Student> stream2 = studentList.parallelStream();
}

2.2.通过一个数组创建Stream

    @Test
    public void test2(){
        //获取一个整形Stream
        int[] arr = new int[]{1,2,34,4,65,7,87,};
        IntStream intStream = Arrays.stream(arr);
        //获取一个Student对象Stream
        Student[] students = StudentData.getArrStudents();
        Stream<Student> stream = Arrays.stream(students);
    }

2.3.通过Stream.of

    @Test
    public void test3(){
        Stream<Integer> integerStream = Stream.of(1, 2, 3, 5, 6, 7, 8);
        Stream<String> stringStream = Stream.of("1", "2", "3", "4", "5");
        Stream<Student> studentStream = Stream.of(
                new Student(1, "刘备", 18, 90.4),
                new Student(2, "张飞", 19, 87.4),
                new Student(3, "关羽", 21, 67.4));
    }

2.4.创建一个无限流

@Test
public void test4(){
    //每隔5个数取一个,从0开始,此时就会无限循环
    Stream.iterate(0,t->t+5).forEach(System.out::println);
    //每隔5个数取一个,从0开始,只取前5个数
    Stream.iterate(0,t->t+5).limit(5).forEach(System.out::println);
    //取出一个随机数
    Stream.generate(Math::random).limit(5).forEach(System.out::println);
}

3.使用Stream操作数据

3.1.筛选和切片

@Test
public void test1(){
    List<Student> list  = StudentData.getStudents();
    //(1)过滤:过滤出所有年龄大于20岁的同学
    list.stream().filter(item->item.getAge()>20).forEach(System.out::println);
    //(2)截断流:筛选出前3条数据
    list.stream().limit(3).forEach(System.out::println);
    //(3)跳过元素:跳过前5个元素
    list.stream().skip(5).forEach(System.out::println);
    //(4)过滤重复数据:
    list.stream().distinct().forEach(System.out::println);
}

3.2.映射

@Test
public  void test2(){
    //(1)map操作
    List<String> list  = Arrays.asList("java","python","go");
    Stream<String> stream = list.stream();
    //此时每一个小写字母都有一个大写的映射
    stream.map(str -> str.toUpperCase()).forEach(System.out::println);
    //筛选出所有的年龄,再过滤出所有大于20的年龄有哪些
    List<Student> studentList  = StudentData.getStudents();
    Stream<Student> stream1 = studentList.stream();
    Stream<Integer> ageStream = stream1.map(Student::getAge);
    ageStream.filter(age->age>20).forEach(System.out::println);
    //(2)floatMap:将流中的每一个值换成另外一个流
}

3.3.排序

public  void test3(){
    //(1)自然排序
    List<Integer> list  = Arrays.asList(4,3,7,9,12,8,10,23,2);
    Stream<Integer> stream = list.stream();
    stream.sorted().forEach(System.out::println);
    //(2)对象排序:对象类可以先实现comparable接口,或者是直接指定
    //第一种:先实现compable接口
    List<Student> studentList  = StudentData.getStudents();
    studentList.stream().sorted().forEach(System.out::println);
    //第二种:直接指定comparable
    List<Student> studentList1  = StudentData.getStudents();
    studentList1.stream()
            .sorted((e1,e2)-> Integer.compare(e1.getAge(),e2.getAge()))
            .forEach(System.out::println);
}

4.终止Stream

4.1.匹配和查找

public void test1(){
    List<Student> list  = StudentData.getStudents();
    //(1)判断所有的学生年龄是否都大于20岁
    boolean allMatch = list.stream().allMatch(item -> item.getAge() > 20);
    //(2)判断是否存在学生的年龄大于20岁
    boolean anyMatch = list.stream().anyMatch(item -> item.getAge() > 20);
    //(3)判断是否存在学生叫曹操
    boolean noneMatch = list.stream().noneMatch(item -> item.getName().equals("曹操"));
    //(4)查找第一个学生
    Optional<Student> first = list.stream().findFirst();
    //(5)查找所有的学生数量
    long count = list.stream().count();
    long count1 = list.stream().filter(item -> item.getScore() > 90.0).count();
    //(6)查找当前流中的元素
    Optional<Student> any = list.stream().findAny();
    //(7)查找学生最高的分数:Student实现了comparable接口的话,可直接比较
    Stream<Double> doubleStream = list.stream().map(item -> item.getScore());
    doubleStream.max(Double::compare);
    //(8)查找学生最低的分数
}

4.2.归约

public void test2(){
    //(1)计算数的总和
    List<Integer> list = Arrays.asList(1,2,3,4,5);
    list.stream().reduce(0,Integer::sum);
    //(3)计算学生总分
    List<Student> studentList = StudentData.getStudents();
    Stream<Double> doubleStream = studentList.stream().map(Student::getScore);
    doubleStream.reduce(Double::sum);
}

4.3.收集

public void test3(){
    List<Student> studentList = StudentData.getStudents();
    //返回一个list
    List<Student> listStream = studentList.stream()
            .filter(e -> e.getAge() > 18)
            .collect(Collectors.toList());
    //返回一个Set
    Set<Student> setStream = studentList.stream()
            .filter(e -> e.getAge() > 18)
            .collect(Collectors.toSet());
    //返回其他的类型
}
INMP441麦克风避坑指南:为什么你的I2S录音总有杂音?(附示波器调试技巧) 本文针对INMP441麦克风与ESP32等MCU通过I2S接口连接时常见的录音杂音问题,提供了一套系统的硬件调试指南。文章深入剖析了电源纹波、信号完整性、接地环路及时钟抖动四大噪声根源,并详细讲解了如何使用示波器进行逐层排查,给出了增加LC滤波、串联阻尼电阻、优化布局布线等切实可行的解决方案,帮助开发者从根本上提升音频质量。 阅读详情

相关推荐

copilot基于 DeepSeek-R1 思路构建 VLA 自动驾驶强化学习系统

下面给出一个完整示例代码,结合 DeepSeek‑R1 的技术方法,实现一个端到端的 VLA(视觉+语言行动)自动驾驶深度强化学习系统。.2f。

ywfwyht的博客 774

万字详解 Stream 流式编程,写代码也可以很优雅

Stream(流)是 Java 8 引入的一个新的抽象概念,它代表着一种处理数据的序列。简单来说,Stream 是一系列元素的集合,这些元素可以是集合、数组、I/O 资源或者其他数据源。Stream API 提供了丰富的操作方法,可以对 Stream 中的元素进行各种转换、过滤、映射、聚合等操作,从而实现对数据的处理和操作。Stream API 的设计目标是提供一种高效、可扩展和易于使用的方式来处理大量的数据。

兴趣是最好的老师,勤能补拙 1815

AD9371实战:如何用ZCU106搭建JESD204B TX时钟链(含关键参数计算)

本文详细解析了如何基于Xilinx ZCU106开发板为AD9371搭建JESD204B TX时钟链。文章从系统需求出发,逐步推导出从IQ采样率到GTH线速率的关键参数计算公式,并提供了在Vivado中配置GTH收发器(包括QPLL选择、分频比设置)的实战步骤与调试技巧,旨在帮助硬件工程师快速实现稳定可靠的JESD204B高速数据传输链路。

weixin_29164843的博客 293

【Java 8系列】Stream详解,看这一篇就够啦

热门系列: 【Java 8系列】Java开发者的判空利器 -- Optional 【Java 8系列】Lambda 表达式,一看就废 程序人生,精彩抢先看 1.前言 2.正文 3.总结 ...

Yangy的博客 5万+

AI提示词实战:用EARS语法5步搞定产品需求拆解(附完整案例)

本文详细介绍了如何运用EARS语法将模糊的产品需求进行原子化拆解,转化为清晰、可执行的结构化指令。通过一个完整的自由职业者项目管理工具案例,演示了从原始需求分析到构建增强AI提示词的五步实战流程,帮助产品经理和技术人员实现高效、精准的需求传达与协作。

nokia的博客 1031

LibTV保姆级教程:从提示词到AI视频成片全流程

AI视频生成技术正以前所未有的速度重塑内容创作行业,过去需要编剧、摄影、剪辑等多角色协作的复杂流程,如今借助AI绘画与图生视频等核心能力,一个人也能完成高质量短视频制作。理解提示词工程是掌控AI视频创作的关键,通过精准描述主体、环境、光线与运镜,可以显著提升生成画面的稳定性与专业度。而图生视频技术则让静态分镜自然流动,有效解决角色一致性与场景漂移等常见问题。这类工具已广泛应用于产品宣传、剧情短片、社交媒体内容生产等场景,大幅降低了视频创作门槛。本文以LibTV一站式AI视频创作平台为例,从核心概念到完整实操

weixin_29046035的博客 941

Java8中Stream流的详细用法

Java8的两个重大改变,一个是Lambda表达式,另一个就是的Stream 是Java8中处理集合的关键抽象概念,它可以对集合进行非常复杂的查找、过滤、筛选等操作。

不惧困难 顽强拼搏 5423

芒果YOLO11改进81:主干Backbone篇之DCNv3结构:即插即用|使用pytorch代码实现,并针对YOLO11专门优化模块

芒果YOLO11改进81:主干Backbone篇之DCNv3结构:即插即用|使用pytorch代码实现,并针对YOLO11专门优化模块

包括YOLOv5、YOLOv7、YOLOv8等模型改进 736

js 判断字符串为空和不为空(两种方法)

1 判断字符串为空 (1)第一种方法 var test=""; if(test==""||test==null||test==undefined){ alert("为空"); } (2)第二种方法 var test=""; if(!test){ alert("为空"); } 2 判断字符串不为空 (1)第一种方法 var test=""; if(test==""||test==null||test==undefined){ alert("为空"); } .

旭东怪的博客 7万+

RAG面试内容整理-7. 多轮问答与上下文拼接策略

在对话式的RAG应用中,多轮问答需要处理上下文相关性问题:用户的提问往往依赖于之前的对话内容。为正确理解用户每一轮的问题,系统需要保留和传递对话历史信息。

不务正业的猿 376

掌握RDMA核心:从同步构建到异步事件的连接艺术

本文深入解析RDMA编程中的双模式设计,揭示同步配置与异步事件机制的协作关系。第一部分阐述同步函数rdma_bind_addr和rdma_listen的本地化角色,强调它们仅完成本地端点配置。第二部分剖析异步事件模型,重点分析连接请求和建立事件的处理流程。通过完整生命周期序列图展示两种模式的交互过程,并提供错误处理、资源管理和性能调优的实用建议。文章指出,理解同步本地配置与异步网络响应这一责任划分,是掌握RDMA编程的关键所在。

数字人生 282

【Java】Java8 之Stream用法总结(持续更新)

Java8 之Stream用法总结

慕白Lee的博客 1万+

使用 MATLAB/Simulink 构建一个基于PID控制的直流电机速度调节系统模型

直流电机(DC Motor)因其结构简单、成本低廉、易于控制等特点,广泛应用于各种工业自动化和家用电器中。PID控制器作为最常用的控制策略之一,在直流电机的速度调节系统中具有重要应用价值。通过合理调整比例(P)、积分(I)、微分(D)三个参数,可以实现对电机速度的精确控制。本教程将带你使用构建一个基于PID控制的直流电机速度调节系统模型,涵盖电机模型构建、PID控制器设计、系统仿真与调试等多个方面。本文介绍了如何使用构建一个基于PID控制的直流电机速度调节系统模型。

amy_mhd的博客 217

java 8 stream_java8中一个极其强悍的新特性Stream(非常实用)

java8中有两个非常有名的改进,一个是Lambda表达式,一个是Stream。如果我们了解过函数式编程的话,都知道Stream真正把函数式编程的风格引入到了java中。这篇文章由简入繁逐步介绍Stream。一、Stream是什么从名字来看,Stream就是一个流,他的主要作用就是对集合数据进行查找过滤等操作。有点类似于SQL的数据库操作。一句话来解释就是一种高效且易用的数据处理方式。大数据领域也...

weixin_39619451的博客 261

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java8 list切片_java8中一个极其强悍的新特性Stream(非常实用)

java8中有两个非常有名的改进,一个是Lambda表达式,一个是Stream。如果我们了解过函数式编程的话,都知道Stream真正把函数式编程的风格引入到了java中。这篇文章由简入繁逐步介绍Stream。一、Stream是什么从名字来看,Stream就是一个流,他的主要作用就是对集合数据进行查找过滤等操作。有点类似于SQL的数据库操作。一句话来解释就是一种高效且易用的数据处理方式。大数据领域也...

weixin_42133415的博客 399

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

foreach判断最后一个_java8中一个极其强悍的新特性Stream(非常实用)

java8中有两个非常有名的改进,一个是Lambda表达式,一个是Stream。如果我们了解过函数式编程的话,都知道Stream真正把函数式编程的风格引入到了java中。这篇文章由简入繁逐步介绍Stream。一、Stream是什么从名字来看,Stream就是一个流,他的主要作用就是对集合数据进行查找过滤等操作。有点类似于SQL的数据库操作。一句话来解释就是一种高效且易用的数据处理方式。大数据领域也...

weixin_39636691的博客 7542

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java8 lambda map<list>排序_java8中一个极其强悍的新特性Stream(非常实用)

java8中有两个非常有名的改进,一个是Lambda表达式,一个是Stream。如果我们了解过函数式编程的话,都知道Stream真正把函数式编程的风格引入到了java中。这篇文章由简入繁逐步介绍Stream。一、Stream是什么从名字来看,Stream就是一个流,他的主要作用就是对集合数据进行查找过滤等操作。有点类似于SQL的数据库操作。一句话来解释就是一种高效且易用的数据处理方式。大数据领域也...

weixin_39781363的博客 126

java切片_ java中一个极其强悍的新特性Stream详解(非常实用)

java8中有两个非常有名的改进,一个是Lambda表达式,一个是Stream。如果我们了解过函数式编程的话,都知道Stream真正把函数式编程的风格引入到了java中。这篇文章由简入繁逐步介绍Stream。一、Stream是什么从名字来看,Stream就是一个流,他的主要作用就是对集合数据进行查找过滤等操作。有点类似于SQL的数据库操作。一句话来解释就是一种高效且易用的数据处理方式。大数据领域也...

weixin_39788131的博客 1614

Java8中一个极其强悍的新特性,很多人没用过(非常实用)

点击上方“肉眼品世界”,选择“设为星标”深度价值体系传递转自: Java的架构师技术栈原文:http://suo.im/6p27hA(点击阅读全文前往)Java8中有两个非常有名的改进,...

weixin_45727359的博客 1699
上一篇: 常见的算法题目分类图
下一篇: Java开发设计——UML类图
Allenlzcoder
博客等级 码龄10年 925粉丝 512原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值