Java流式编程的使用

news2024/11/24 19:54:57

流式编程的使用步骤

使用流式编程的步骤就是: 设置数据源, 设置数据处理的方式,设置收集结果的方式

使用filter方法实现过滤条件

例子为下(查询年龄大于18的用户):

    @Test
    public void streamTest1() {
        List<Student> students = Arrays.asList(
                new Student("tolen", 22, "男"),
                new Student("ostkakaw", 19, "女"),
                new Student("tolenaitolen", 18, "男")
        );

        List<Student> result = students
                .stream() //stream方法就是设置数据源
                .filter(user -> user.getAge() > 18) //设置过滤条件,这里的过滤条件使用lambda表达式
                .collect(Collectors.toList());//将结果设置为一个list
        for (Student student : result) {
            System.out.println(student.toString());
        }
    }

 结果为下:

特殊情况

 1. 限制条件存在多个且需要同时成立(且)

编写格式为下:

    @Test
    public void streamTest3() {
        List<Student> students = Arrays.asList(
                new Student("tolen", 22, "男"),
                new Student("ostkakaw", 19, "女"),
                new Student("tolenaitolen", 18, "男")
        );
        //编写限制条件
        Predicate<Student> predicate1 = user -> user.getAge() == 18;
        Predicate<Student> predicate2 = user -> user.getName() == "tolenaitolen";


        List<Student> result = students
                .stream() //stream方法就是设置数据源
                .filter(predicate1.and(predicate2)) //如果存在多个需要同时成立的条件时,需要使用and()方法
                .collect(Collectors.toList());//将结果设置为一个list
        for (Student student : result) {
            System.out.println(student.toString());
        }
    }

 结果为下:

2. 限制条件存在多个且不需要同时成立(或)

 编写格式为下:

    @Test
    public void streamTest4() {
        List<Student> students = Arrays.asList(
                new Student("tolen", 22, "男"),
                new Student("ostkakaw", 19, "女"),
                new Student("tolenaitolen", 18, "男")
        );
        //编写限制条件
        Predicate<Student> predicate1 = user -> user.getAge() > 18;
        Predicate<Student> predicate2 = user -> user.getName() == "tolen";

        List<Student> result = students
                .stream() //stream方法就是设置数据源
                .filter(predicate1.or(predicate2)) //如果存在多个需要同时成立的条件时,需要使用and()方法
                .collect(Collectors.toList());//将结果设置为一个list
        for (Student student : result) {
            System.out.println(student.toString());
        }
    }

结果为下:

使用limit方法限制list的长度

例子为下:

    @Test
    public void streamTest2() {
        List<Student> students = Arrays.asList(
                new Student("tolen", 22, "男"),
                new Student("ostkakaw", 19, "女"),
                new Student("tolenaitolen", 18, "男")
        );
        students
                .stream()//设置数据源
                .limit(2)//设置最大的长度
                .collect(Collectors.toList()) //将结果设置为一个list
                .forEach(student -> System.out.println(student.toString()));
    }

结果为下:

使用min和max方法找出最值

 例子为下:

    @Test
    public void streamTest5() {
        List<Integer> nums = Arrays.asList(4, 5, 1, 3, 6);
        Integer maxResult = nums.stream()//设置数据源
                .max(Integer::compareTo) //这里的lambda表达式使用Integer默认的比较方法,如果需要查询最小值就使用min方法
                .get();//max方法返回的数据是Optional,所以需要使用get方法才获得最终的数据
        System.out.println(maxResult);
    }

结果为下:

如果需要查询最小值的话,我们只需要将max方法换成min方法即可。

使用sorted方法对list进行排序

 例子为下:

    @Test
    public void streamTest6() {
        List<Integer> nums = Arrays.asList(4, 5, 1, 3, 6);
        nums.stream() //设置数据源
                .sorted(Integer::compareTo) //进行排序操作,默认使用升序
                .collect(Collectors.toList()).forEach(num -> System.out.println(num));
    }

结果为下:

特殊情况

 需要实现降序,对应的代格式为下:

    @Test
    public void streamTest6() {
        List<Integer> nums = Arrays.asList(4, 5, 1, 3, 6);
        nums.stream() //设置数据源
                .sorted(Comparator.reverseOrder()) //进行排序操作,默认使用升序,lambda表达式设置为降序
                .collect(Collectors.toList()).forEach(num -> System.out.println(num));
    }

结果为下:

使用map方法和reduce方法对应list的数据进行修改

map方法(返回的结果是多个,而非只有一个,用于返回一个完整的list)

例子为下:

    @Test
    public void streamTest7() {
        List<Integer> nums = Arrays.asList(4, 5, 1, 3, 6);
        nums.stream() //设置数据源
                .map(num -> num + 10)
                .collect(Collectors.toList())
                .forEach(num -> System.out.println(num));
    }

效果为下:

reduce方法(返回的结果只有一个,用于做累计操作)

例子为下:

    @Test
    public void streamTest8() {
        List<Integer> nums = Arrays.asList(4, 5, 1, 3, 6);
        Integer result = nums.stream() //设置数据源
                .reduce((num, sum) -> num + sum) //等于做累加操作,在lambda表达式中的参数 num 和sum 的位置可以互换,不影响累加的结果
                .get();
        System.out.println(result);
    }

 结果为下:

等于做累加操作,在lambda表达式中的参数 num 和sum 的位置可以互换,不影响累加的结果。

使用count方法计算list的长度

例子为下:

    @Test
    public void streamTest9() {
        List<Integer> nums = Arrays.asList(4, 5, 1, 3, 6);
        long count = nums.stream() //设置数据源
                .count();
        System.out.println(count);
    }

效果为下:

使用flatMap方法对数据进行压扁

例子:

例子中通过map会获得对应的数组,通过flatMap方法将这些数组压扁为。(便于后续操作)

 作用:将数组转换为流。

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

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

相关文章

【Java 基础篇】Java Function 接口详解

在 Java 编程中&#xff0c;Function 接口是一个非常重要的函数式接口&#xff0c;它允许你定义一个接受一个参数并产生结果的函数。Function 接口通常在各种数据处理和转换操作中使用&#xff0c;例如集合处理、流处理以及函数式编程。 本文将详细介绍 Function 接口的使用方…

基于蚁群算法的航线规划

一、背景 二、代码 main.m clear;clc; r21; %21*21 c21; intau20; xstart1; ystart3; %起点 xend20; yend18; %终点 gd1; xt[5,11,8,16,12,15,17,19]; %障碍物 yt[9,15,7,3,12,8,15,12];threat8; NCmax200; %迭代次数%初始化数据 Gamma_A0.9; Rho_A0.2; Alpha_A1; Beta_A3;…

SpringBoot集成easypoi实现execl导出

<!--easypoi依赖&#xff0c;excel导入导出--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.4.0</version></dependency>通过Exce注解设置标头名字和单…

RocketMQ源码解析(下 )

一、Producer发送消息过程 1、普通发送消息过程 一般发送消息都是new一个DefaultMQProducer&#xff0c;所以先找到DefaultMQProducer类 先进行DefaultMQProducerImpl的初始化&#xff0c;所有Producer的启动过程&#xff0c;最终都会调用到DefaultMQProducerImpl#start方法…

Llama2-Chinese项目:2.3-预训练使用QA还是Text数据集?

Llama2-Chinese项目给出pretrain的data为QA数据格式&#xff0c;可能会有疑问pretrain不应该是Text数据格式吗&#xff1f;而在Chinese-LLaMA-Alpaca-2和open-llama2预训练使用的LoRA技术&#xff0c;给出pretrain的data为Text数据格式。所以推测应该pretrain时QA和Text数据格式…

C++11 - 右值引用

临时空间 临时空间具有常性&#xff0c;什么时候会产生临时空间呢&#xff1f; 1、函数传值返回 把aa拷贝给临时空间&#xff0c;如果是很大的对象并且进行深拷贝&#xff0c;消耗会很大 证明&#xff1a; 这是list模拟实现迭代器的和&#xff01;重载时&#xff0c;while( it…

Secrets

文章目录 主要内容一.命令行创建1.命令行创建代码如下&#xff08;示例&#xff09;: 2.解释 二.环境变量secret1.使用刚才创建的密码&#xff0c;创建Pod并进行尝试。代码如下&#xff08;示例&#xff09;: 2.解释 总结 主要内容 命令行创建环境变量secret 预备知识 Secrets…

车载软件架构 —— AUTOSAR Vector SIP包(二)

车载软件架构 —— AUTOSAR Vector SIP包(二) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在…

【小程序】通过微信提供方法实现条码或二维码的扫描

概述 实现扫码获取信息&#xff0c;对接相应接口 可实现详情查询&#xff0c;已经是完整代码了copy都难么 详细 一、前期准备工作 软件环境&#xff1a;微信开发者工具 官方下载地址&#xff1a;微信开发者工具下载地址与更新日志 | 微信开放文档​编辑 二、程序实现具体步…

机器学习之对神经网络的基本原理的了解

文章目录 神经网络与机器学习神经网络的结点 神经网络与机器学习 神经网络代替模型和用学习规则代替机器学习 神经网络代替模型&#xff1a; 神经网络是一种受到生物神经系统启发的计算模型&#xff0c;它由多个神经元层组成&#xff0c;这些神经元层之间有连接权重&#xff…

测试员有必要转测试开发吗?

为什么很多公司都在招测试开发&#xff1f; 质量保证和软件稳定性&#xff1a;测试开发人员在软件开发生命周期中扮演着关键的角色&#xff0c;他们负责编写和执行测试代码&#xff0c;以确保软件的质量和稳定性。他们可以帮助发现和修复潜在的问题和缺陷&#xff0c;提高软件…

现在公司都在用的CI/CD框架到底是什么?

目录 一&#xff0c;CI/CD到底是什么&#xff1f; 二&#xff0c;为什么要用CI/CD&#xff1f; 三&#xff0c;CI/CD的优缺点&#xff1f; 四&#xff0c;CI/CD都基于什么服务搭建&#xff1f; 五&#xff0c;CI/CD是否适用于所有类型的软件开发&#xff1f; 一&#xff0…

Quartus的2FSK调制解调verilog

名称&#xff1a;Quartus的2FSK调制解调verilog 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a;使用verilog实现2FSK的调制和解调&#xff0c;并进行仿真 代码下载&#xff1a;Quartus的2FSK调制解调verilog_Verilog/VHDL资源下载 代码网&#xff1a;…

SpringBoot之响应处理

文章目录 前言一、返回值处理器ReturnValueHandler流程关于HttpMessageConverters的初始化ReturnValueHandler与MappingJackson2HttpMessageConverter关联 二、内容协商内容协商原理底层源码 三、自定义MessageConverter总结 前言 包括返回值处理器ReturnValueHandler、内容协…

OpenGLES:绘制一个颜色渐变的圆

一.概述 今天使用OpenGLES实现一个圆心是玫红色&#xff0c;向圆周渐变成蓝色的圆。 本篇博文的内容也是后续绘制3D图形的基础。 实现过程中&#xff0c;需要重点关注的点是&#xff1a;如何使用数学公式求得图形的顶点&#xff0c;以及加载颜色值。 废话不多说&#xff0c…

FPGA的BPSK调制verilog

名称&#xff1a;BPSK调制verilog 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a; 一、设计说明 BPSK调制广泛应用于卫星通信、移动通信等领域。本题目要求设计一个基于直接数字频率合成技术的BPSK调制器&#xff0c;实现对输入周期数字比特流的BPSK调…

LVGL_基础知识

LVGL_基础知识 1、设置对象大小 lv_obj_t * obj lv_obj_create(lv_scr_act()); //lv_obj_set_width(obj, 300); //lv_obj_set_height(obj, 500); lv_obj_set_size(obj,200, 240);//和上面两句的效果一样2、获取对象大小 lv_obj_t * obj lv_obj_create(lv_scr_act()); //lv…

GPS硬件坐标转百度地图坐标

在地图定位开发中&#xff0c;许多定位模块输出坐标系是国际标准 WGS-84 坐标系&#xff0c;所以开发者在国内常见地图定位时&#xff0c;会发现与实际情况有几十米的误差。这并非模块问题&#xff0c; 而是国内地图采用了非标坐标系所致。 国内常见地图如高德地图使用 GCJ-02 …

Kubernetes集群+Keepalived+Nginx+防火墙 实例

目录 实验前期规划 1.拓扑图结构 2.实验要求 3.实验环境规划 一.kubeadm 部署 K8S 集群架构 1.环境准备 2.三个节点安装docker 3.三个节点安装kubeadm&#xff0c;kubelet和kubectl 4.部署K8S集群 &#xff08;1&#xff09;初始化 4.部署K8S集群 &#xff08;1&am…

133.【MySQL_运维篇】

MySQL_运维 (一)、日志 ⭐1.日志_错误日志 (ERROR-LOG)(1).错误日志_介绍(2).错误日志_示列 2.日志_二进制日志 (BINARY-LOG)(1).二进制日志_介绍(2).二进制日志_作用(3).二进制日志_格式(4).二进制日志_查看 (CMD)(5).二进制日志_删除 3.日志_查询日志 (GENERAL-LOG)(1).开启_…