超强的Stream流了解一下

简介: 超强的Stream流了解一下

在这里插入图片描述

演示点一:

筛选年龄小于21,且薪水大于2000的数据。

第一种写法:
List<User> userList = Arrays.asList(
                new User("小明", 20, 3000),
                new User("小红", 20, 2000),
                new User("小张", 21, 3000)
        );
        Predicate<User> predicate1 = user -> user.getAge() < 21;
        Predicate<User> predicate2 = user -> user.getSalary() > 2000;

        List<User> collect = userList.stream()
                .filter(predicate1)
                .filter(predicate2)
                .collect(Collectors.toList());
        System.out.println("collect = " + collect);
第二种写法:
List<User> userList = Arrays.asList(
                new User("小明", 20, 3000),
                new User("小红", 20, 2000),
                new User("小张", 21, 3000)
        );

        List<User> collect = userList.stream()
                .filter(user -> user.getAge() < 21)
                .filter(user -> user.getSalary() > 2000)
                .collect(Collectors.toList());
        System.out.println("collect = " + collect);
第三种写法:
        List<User> userList = Arrays.asList(
                new User("小明", 20, 3000),
                new User("小红", 20, 2000),
                new User("小张", 21, 3000)
        );
        Predicate<User> predicate1 = user -> user.getAge() < 21;
        Predicate<User> predicate2 = user -> user.getSalary() > 2000;

        List<User> collect = userList.stream()
                .filter(predicate1.and(predicate2))
                .collect(Collectors.toList());
        System.out.println("collect = " + collect);

collect = [User(name=小明, age=20, salary=3000)]

演示点二:

筛选年龄小于21,或薪水大于2000的数据。

List<User> userList = Arrays.asList(
                new User("小明", 20, 3000),
                new User("小红", 20, 2000),
                new User("小张", 21, 3000)
        );
        Predicate<User> predicate1 = user -> user.getAge() < 21;
        Predicate<User> predicate2 = user -> user.getSalary() > 2000;

        List<User> collect = userList.stream()
                .filter(predicate1.or(predicate2))
                .collect(Collectors.toList());
        System.out.println("collect = " + collect);

collect = [User(name=小明, age=20, salary=3000), User(name=小红, age=20, salary=2000), User(name=小张, age=21, salary=3000)]

演示点三:

filter的使用:筛选字符串长度大于等于5的字符串。

List<String> list = Arrays.asList("Hello", "World", "Java");
        list.stream()
                .filter(str -> str.length() >= 5)
                .forEach(str -> System.out.println(str));

Hello
World

演示点四

limit 截取流中的元素

        List<String> list = Arrays.asList("Hello", "World", "Java");
        list.stream()
                .limit(2)
                .forEach(str -> System.out.println(str));

Hello
World

演示点五

sorted 排序,默认进行升序排列

List<Integer> list = Arrays.asList(1,6,9,3,8,12,0,29);
        list.stream()
                .sorted()
                .forEach(num -> System.out.println(num));

0
1
3
6
8
9
12
29

降序排列:

    List<Integer> list = Arrays.asList(1,6,9,3,8,12,0,29);
        list.stream()
                .sorted(Comparator.reverseOrder())
                .forEach(num -> System.out.println(num));

29
12
9
8
6
3
1
0

演示点六

max 求最大值,min 最小值, count 长度

List<Integer> list = Arrays.asList(1, 6, 9, 3, 8, 12, 0, 29);
        System.out.println(list.stream()
                .max(Integer::compareTo)
                .get());
        System.out.println(list.stream()
                .min(Integer::compareTo)
                .get());
        System.out.println(list.stream()
                .count());

29
0
8

演示点七

stream的map操作:对流操作,返回一个新的流。

List<Integer> list = Arrays.asList(1, 6, 9, 3, 8, 12, 0, 29);
        list.stream()
                .map(num -> num + 10)
                .forEach(num -> System.out.println(num));

演示点八

reduce 根据指定的计算模型将Stream中的值计算得到一个最终结果。

    List<Integer> list = Arrays.asList(1, 6, 9, 3, 8, 12, 0, 29);
        System.out.println(list.stream()
                .reduce((sum, num) -> sum + num).get());

68

相关文章
|
SQL 关系型数据库 数据库
学习分布式事务Seata看这一篇就够了,建议收藏
学习分布式事务Seata看这一篇就够了,建议收藏
16946 2
|
6月前
|
负载均衡 算法 应用服务中间件
Nginx长连接负载均衡详细说明以及案例
本文详细介绍了Nginx长连接负载均衡的配置与原理。长连接(Keepalive)允许客户端和服务器保持连接,减少建立和关闭连接的开销。Nginx支持多种负载均衡算法,如轮询、IP哈希等。通过在Nginx配置文件中使用`upstream`模块和`keepalive`指令,可以实现长连接负载均衡,从而提高系统的性能和响应速度。示例配置展示了如何设置后端服务器组、长连接数及HTTP/1.1协议,确保连接复用,降低延迟。
403 5
|
7月前
|
数据采集 API 数据库
为什么用源码搭建体育比分直播系统更高效
使用源码搭建体育比分直播系统比从零开发或第三方服务更高效。它节省开发时间和成本,提供灵活定制功能,支持品牌化与UI优化;掌控数据源与更新机制,提高数据实时性;优化系统性能,减少冗余功能;增强数据安全与隐私控制,避免依赖第三方;具备长期维护和扩展性,支持新功能和技术兼容。适合希望打造自有品牌、优化用户体验的企业或开发者。
205 12
|
10月前
|
自然语言处理 数据可视化 Python
利用Python爬取百度百科词条并生成词云图
本文介绍如何使用Python爬取百度百科词条内容并生成词云图,涉及`requests`、`BeautifulSoup`、`jieba`、`wordcloud`等库的使用,从环境准备、数据爬取、中文分词到词云图生成,详细展示了整个流程。
419 0
|
9月前
|
监控 API 开发者
Sentinel:微服务的全能守护
Sentinel 是阿里巴巴开源的一款轻量级流量控制和熔断降级框架。它通过设置流量控制、熔断降级和系统保护规则,确保微服务在高并发场景下稳定运行。Sentinel 提供丰富的功能、实时监控和灵活的集成方式,适用于各种分布式系统。
1383 0
|
9月前
|
编解码 前端开发 搜索推荐
如何建立自己的体育直播平台-源码搭建全流程
随着在线观看体育赛事用户的爆发式增长,搭建专业体育直播应用成为趋势。利用如熊猫比分的全链路解决方案,创业者可快速启动平台。主要步骤包括前期技术准备(赛事API接口、服务器配置、域名选择、短信服务、云直播服务)、定制化(LOGO标识、功能测试与优化)及正式上线与运营(推广、持续更新、主播入驻)。此方案使创业者能高效进入体育市场,抓住机遇。
|
12月前
|
Java 数据处理
Stream流的简单使用
这篇文章介绍了Java中Stream流的基本概念和使用方法。文章解释了Stream流的三类方法:获取流、中间方法和终结方法。详细讨论了如何生成Stream流,包括从Collection体系集合、Map体系集合、数组和同种数据类型的多个数据中生成流。接着,介绍了Stream流的中间操作方法,如`filter`、`limit`、`skip`、`concat`和`distinct`。文章还讨论了Stream流的终结方法,如`forEach`和`count`,以及收集方法,如`collect`。最后,通过几个例子演示了如何使用Stream流进行数据处理和收集操作。
|
Web App开发 Windows
FFmpeg开发笔记(十五)详解MediaMTX的推拉流
MediaMTX是开源轻量级流媒体服务器,提供RTSP, RTMP, HLS, WebRTC和SRT服务。启动后,它在不同端口监听。通过FFmpeg的推拉流测试,证明了MediaMTX成功实现HLS流媒体转发,但HLS播放兼容性问题可能因缺少音频流导致。推流地址为rtsp://127.0.0.1:8554/stream,RTMP地址为rtmp://127.0.0.1:1935/stream,HLS播放地址为http://127.0.0.1:8888/stream(Chrome)和http://127.0.0.1:8888/stream/index.m3u8(其他播放器可能不支持)。
2026 2
FFmpeg开发笔记(十五)详解MediaMTX的推拉流
|
Dragonfly 算法 安全
RT-Thread快速入门-动态内存堆管理方法
RT-Thread快速入门-动态内存堆管理方法
347 0
|
存储 Java API
Java——Stream流(1/2):Stream流入门、Stream流的创建(认识Stream、体验Stream流、Stream流的使用步骤、获取Stream流的方法)
Java——Stream流(1/2):Stream流入门、Stream流的创建(认识Stream、体验Stream流、Stream流的使用步骤、获取Stream流的方法)
300 0