Java流式编程的使用

2023-09-21 13:41:53

流式编程的使用步骤

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

使用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);
    }

效果为下:

更多推荐

ES6中新增加的Symbol数据类型及其使用场景

聚沙成塔·每天进步一点点⭐专栏简介在这里插入图片描述⭐ES6中的Symbol数据类型⭐对象属性名称⭐防止属性冲突⭐内置Symbols⭐迭代器和生成器⭐写在最后⭐专栏简介前端入门之旅:探索Web开发的奇妙世界记得点击上方或者右侧链接订阅本专栏哦几何带你启航前端之旅欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、

华为云云耀云服务器L实例评测|基于L实例安装Prometheus+Grafana插件实现数据可视化监控

文章目录一、云耀云服务器介绍二、安装Prometheus创建prometheus.service配置文件启动prometheus服务查看prometheus服务进程三、安装node_exporter下载node_exporter组件包创建node_exporter.service配置文件启动node_exproter服

Docker 存储驱动解析:选择最适合你的存储方案

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

安果浏览器-这才是好用的安卓浏览器。

视频演示:安果浏览器,当之无愧的人民浏览器_哔哩哔哩_bilibili下载地址:安果移动☆一览无余的美观界面:深度优化的用户界面,为您带来简洁而不简单的浏览体验。无论是设计还是功能,安果浏览器都为您考虑到了细节。每一次滑动,每一个点击,都是为了给您带来更好的体验。☆秒速加载,畅快体验:厌倦了等待的时长?安果浏览器利用先

Java 字节流

一、输入输出流输入输出-------读写文件输入-------从文件中获取数据到自己的程序中,接收处理【读】输出-------将自己程序中处理好的数据保存到文件中【写】流-------数据移动的轨迹二、流的分类按照数据的移动轨迹分为:输入流输出流按照每一次读写/数据量的大小将流分成:字节流字符流字节流:每一次可读写一个

使用Canvas绘制一个验证码组件

使用Canvas绘制一个验证码组件前言验证码,这一日常伴随我们的要素,是我们在线交互的重要安全保障。你的手机短信里是否被它占据半壁江山,今天我们就来聊聊如何在网页上实现一个简单的验证码组件。大家在登录网站时为了防止被恶意攻击或者多次点击操作,使用验证码是最常用的实现方式。在学习完Canvas后,通过Canvas实现简单

Linux管理多版本node.js

这里介绍的是Linux版本的nvm工具:一个nodejs版本管理工具!这里可以灵活切换node指定版本哟~下载地址:https://github.com/nvm-sh/nvm/releases/1.安装需要先安装git、curlyuminstall-ygitcurl这里很慢,需要登录。如果不小心退出来,需要重新执行一下

AI绘画Stable Diffusion原理之扩散模型DDPM

前言传送门:stablediffusion:Git|论文stable-diffusion-webui:GitGoogleColabNotebook部署stable-diffusion-webui:GitkaggleNotebook部署stable-diffusion-webui:GitAI绘画,输入一段文本就能生成相关

xyhcms getshell

下载xyhcms3.6.2021版本并用phpstudy搭建functionget_cookie($name,$key=''){if(!isset($_COOKIE[$name])){returnnull;}$key=empty($key)?C('CFG_COOKIE_ENCODE'):$key;$value=$_CO

Naivcat 数据迁移工具 | 竟然那么香

近期,我们收到一位童鞋的留言(如下图),他建议我们多宣传Navicat的数据迁移工具,因为他身边许多小伙伴并非很了解这一功能。今天,我们为大家深度介绍Naivcat安全、可靠的数据迁移工具。请童鞋们准备好NavicatPremium工具,我们马上开始!数据库数据迁移是指选择、准备、提取和转换数据,并将数据从一个计算机存

孩子写作业买什么样台灯合适?适合孩子读写台灯推荐

现在孩子的普遍都存在视力问题,而导致孩子近视的原因可能跟光线太强或太弱、不用的用眼习惯、长时间的过度用眼等因素有关,根据数据表明目前中国近视患者人数达到6亿多,其中儿童青少年的视力不良率甚至高达八成,所以在孩子的学习道路上,护眼也是重中之重的事情。平时间养成良好的用眼习惯是必不可少的,不过照明光源的选择也重要,所以挑选

热文推荐