最全 Steam 流操作!!!Java Stream 流操作常用 API

文章目录

  • Java Stream 流操作常用 API
    • 一、准备工作
    • 二、Stream 常用 API
      • 1、sorted 排序
      • 2、list 转为 map(并解决重复key问题)
      • 3、filter 方法过滤指定查询条件
      • 4、根据指定列分组
      • 5、通过 map 获取指定列集合
      • 6、根据 List 中 Object 某个属性去重
      • 7、list 统计(求和、最大、最小、平均)
      • 8、anyMatch / allMatch / noneMatch
        • anyMatch:任意一个元素符合条件
        • allMatch:全部元素符合条件
        • noneMatch:全部元素不符合条件
      • 9、peek() 用法

Java Stream 流操作常用 API

一、准备工作

定义实体类:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserVos {

    private Long id;

    private String name;

    private Integer age;

	public static void printUsers(List<UserVos> userVoList){

        System.out.println("==========================================");
        userVoList.forEach(userVo -> {
            System.out.println(userVo.toString());
        });
        System.out.println("==========================================");
    }
}

二、Stream 常用 API

1、sorted 排序

sorted 排序(Integer 类型)默认是升序,reversed() 为降序。

代码示例:

 public static void main(String[] args) {
 
        List<UserVos> userVoList = new ArrayList<>();
        
        userVoList.add(new UserVos(1l,"刘亦菲",28));
        userVoList.add(new UserVos(2l,"刘诗诗",24));
        userVoList.add(new UserVos(3l,"吴奇隆",12));
        userVoList.add(new UserVos(4l,"胡彦斌",4));
        userVoList.add(new UserVos(5l,"吴彦祖",56));
        userVoList.add(new UserVos(6l,"谢广坤",99));
			//降序
        List<UserVos> voList = userVoList.stream().sorted(Comparator.comparing(UserVos::getAge).reversed()).collect(Collectors.toList());

			//升序
        List<UserVos> voList = userVoList.stream().sorted(Comparator.comparing(UserVos::getAge)).collect(Collectors.toList());
        UserVos.printUsers(voList);
    }

打印结果:

==========================================
UserVos(id=6, name=谢广坤, age=99)
UserVos(id=5, name=吴彦祖, age=56)
UserVos(id=1, name=刘亦菲, age=28)
UserVos(id=2, name=刘诗诗, age=24)
UserVos(id=3, name=吴奇隆, age=12)
UserVos(id=4, name=胡彦斌, age=4)
==========================================

2、list 转为 map(并解决重复key问题)

代码示例:

 Map<String, Integer> map1 = userVoList.stream()
                .collect(Collectors.toMap(UserVos::getName, UserVos::getAge, (v1, v2) -> v1));

        System.out.println("转为map的数据为"+map1);

打印结果:

转为map的数据为{吴奇隆=12, 胡彦斌=4, 刘亦菲=28, 吴彦祖=56, 刘诗诗=24, 谢广坤=99}

3、filter 方法过滤指定查询条件

代码示例:

  // 查询age>20并且age<43的数据
  List<UserVos> collect = userVoList.stream().filter((e) ->
                e.getAge() > 20 && e.getAge() < 43
        ).collect(Collectors.toList());

打印结果:

过滤后的数据为
==========================================
UserVos(id=1, name=刘亦菲, age=28)
UserVos(id=2, name=刘诗诗, age=24)
==========================================

4、根据指定列分组

代码示例:

  Map<Integer, List<UserVos>> map = userVoList.stream().collect(Collectors.groupingBy(UserVos::getAge));

  System.out.println("根据指定列分组"+map);

打印结果:

根据指定列分组{99=[UserVos(id=6, name=谢广坤, age=99)], 4=[UserVos(id=4, name=胡彦斌, age=4)], 56=[UserVos(id=5, name=吴彦祖, age=56)], 24=[UserVos(id=2, name=刘诗诗, age=24)], 12=[UserVos(id=3, name=吴奇隆, age=12)], 28=[UserVos(id=1, name=刘亦菲, age=28)]}

5、通过 map 获取指定列集合

代码示例:

    List<Integer> ageList = userVoList.stream()
                .map(UserVos::getAge)
                .collect(Collectors.toList());

    System.out.println("通过map获取指定年龄列集合"+ageList);

打印结果:

通过map获取指定年龄列集合[28, 24, 12, 4, 56, 99]

6、根据 List 中 Object 某个属性去重

代码示例:

// 这里我们引入了两个静态方法,以及通过 TreeSet<> 来达到获取不同元素的效果
// 1. import static java.util.stream.Collectors.collectingAndThen;
// 2. import static java.util.stream.Collectors.toCollection;
        ArrayList<UserVos> collect = userVoList.stream().collect(collectingAndThen(
                toCollection(() -> new TreeSet<>(Comparator.comparing(UserVos::getName))), ArrayList::new));

        UserVos.printUsers(collect);

打印结果:

==========================================
UserVos(id=1, name=刘亦菲, age=28)
UserVos(id=2, name=刘诗诗, age=24)
UserVos(id=3, name=吴奇隆, age=12)
UserVos(id=5, name=吴彦祖, age=56)
UserVos(id=4, name=胡彦斌, age=4)
UserVos(id=6, name=谢广坤, age=99)
==========================================

7、list 统计(求和、最大、最小、平均)

 		double sum = userVoList.stream().mapToDouble(UserVos::getAge).sum();//和
        OptionalDouble max = userVoList.stream().mapToDouble(UserVos::getAge).max();//最大
        OptionalDouble min = userVoList.stream().mapToDouble(UserVos::getAge).min();//最小
        OptionalDouble average = userVoList.stream().mapToDouble(UserVos::getAge).average();//平均值

        System.out.println("和"+sum);
        System.out.println("最大"+max.getAsDouble());
        System.out.println("最小"+min.getAsDouble());
        System.out.println("平均值"+average.getAsDouble());

打印结果:

223.0
最大99.0
最小4.0
平均值37.166666666666664

8、anyMatch / allMatch / noneMatch

anyMatch:任意一个元素符合条件

代码示例:

public static void main(String[] args) {
        List<String> list = Arrays.asList("Y", "A", "B");
        boolean boo = list.stream().anyMatch(str -> "Y".equals(str));
        if (boo) {
            System.out.println("存在字符串等于  Y");
        }
    }

打印结果:

在这里插入图片描述

allMatch:全部元素符合条件

代码示例:

public static void main(String[] args) {
        List<String> list = Arrays.asList("Y", "A", "B");
        boolean boo = list.stream().allMatch(str -> "Y".equals(str));
        if (boo) {
            System.out.println("所有字符串等于  Y");
        } else {
            System.out.println("存在字符串不等于 Y");
        }
    }

打印结果:
在这里插入图片描述

noneMatch:全部元素不符合条件

代码示例:

public static void main(String[] args) {
        List<String> list = Arrays.asList("Y", "A", "B");
        boolean boo = list.stream().noneMatch(str -> "Y".equals(str));
        if (boo) {
            System.out.println("所有字符串不等于  Y");
        } else {
            System.out.println("存在字符串等于 Y");
        }
    }

打印结果:
在这里插入图片描述

9、peek() 用法

java stream 的 peek() 用法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nignx配置

Nginx配置之nginx.conf文件解析及配置 1、nginx.conf文件解析 user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;events {worker_connections 768;# multi_accept on; }http {### Basic Settings###开启文件的高效传输…

RK3568------Openharmony 4.0-Release WIFI/BT模组适配

RK3568------Openharmony 4.0-Release WIFI/BT模组(ap6236)适配 文章目录 RK3568------Openharmony 4.0-Release WIFI/BT模组(ap6236)适配前言一、驱动移植二、设备树配置三 、内核配置四、遇到的问题五、效果展示总结 前言 随着RK3568适配工作的推进&#xff0c;整体适配工作…

差分+前缀和习题集

&#xff08;luogu题号&#xff09; P6568 [NOI Online #3 提高组] 水壶 思路分析 前缀和优化问题。 其实题意就是让你求有k1个数的区间和最大值&#xff0c;那么直接前缀和优化&#xff0c;就可以通过本题。 代码 #include<bits/stdc.h> using namespace std;const in…

spring的bean注册

bean注册 第三方jar包的类想添加到ioc中&#xff0c;加不了Component该怎么办呢。 可以使用Bean和Import引入jar包&#xff0c;可以使用maven安装到本地仓库。 修改bean的名字&#xff1a;Bean("aaa")使用ioc的已经存在的bean对象&#xff0c;如Country&#xff1a;p…

【数据分享】1981—2023年中国逐日归一化植被指数(NDVI)栅格数据

NDVI&#xff0c;全名为Normalized Difference Vegetation Index&#xff0c;中文名称为归一化植被指数。这个指数可以用来定性和定量评价植被覆盖及其生长活力&#xff0c;我们也可以简单地将它理解为体现植被密度和健康状况的一个指标。 本次我们给大家分享的是1981年6月24日…

VSCode用ssh连接ubuntu虚拟机实现远程访问文件夹

1. ubuntu安装ssh服务 1.1 安装 sudo apt-get install ssh sudo apt-get install openssh-server1.2 启动ssh服务 sudo service ssh start sudo service ssh status # 查看状态 ## 或者用下面方式重启ssh服务 ## /etc/init.d/ssh restart1.3 ssh服务加入开机启动 sudo syst…

从天空到地面:无人机航拍推流直播技术在洞庭湖决口封堵中的全方位支援

据新闻报道&#xff0c;受持续强降雨影响&#xff0c;湖南省华容县团洲垸洞庭湖一线堤防发生管涌险情&#xff0c;随后出现决口。截至7月8日20时左右&#xff0c;226米长的洞庭湖一线堤防决口已累计进占208米&#xff0c;目前剩余18米&#xff0c;有望在今晚或9日凌晨实现合龙。…

python爬虫基础入门

步骤 获取网页内容&#xff1a; http请求 python的Requests库 解析网页内容 html网页结构 python的Beautiful Soup库 储存或分析数据 储存进数据库 作为ai分析的数据 转化为图表显示出来 DDoS攻击 通过给服务器发送海量高频请求&#xff0c;大量消耗网页资源&#…

加密与安全_密钥体系的三个核心目标之完整性解决方案

文章目录 Pre机密性完整性1. 哈希函数&#xff08;Hash Function&#xff09;定义特征常见算法应用散列函数常用场景散列函数无法解决的问题 2. 消息认证码&#xff08;MAC&#xff09;概述定义常见算法工作原理如何使用 MACMAC 的问题 不可否认性数字签名&#xff08;Digital …

详细解读COB显示屏使用的共阴技术原理

倒装COB显示屏技术中采用的共阴技术是一种旨在提升能效并且减少驱动功耗的LED驱动方式&#xff0c;常规LED显示屏一般采用共阳极或者独立驱动的方式&#xff0c;而共阴技术就有所不同了&#xff0c;其基本原理如下&#xff1a; 一、基本概念&#xff1a;   共阴技术是指在LED…

Java内存区域与内存溢出异常(自动内存管理)

序言&#xff1a;Java与C之间有一堵由内存动态分配和垃圾收集技术所围成的高墙&#xff0c;墙外面的人想进去&#xff0c;墙里面的人却想出来。 1.1概述 对于从事C、C程序开发的开发人员来说&#xff0c;在内存管理领域&#xff0c;他们既是拥有最高权力的“皇帝”&#xff0c…

【源码下载】瓦房店农村电商大数据平台模板

技术详细实现可在评论区留言。 概述 用 echarts 和 jquery 实现的大屏模板效果。 部分代码展示&#xff0c;访问 dt.sim3d.cn 获取源码&#xff1a; (function($){$.extend({initMapChartPath : function(options){var defs {domId : ,mapName:china,mapCenter:["5…

【目标检测】使用自己的数据集训练并预测yolov8模型

1、下载yolov8的官方代码 地址&#xff1a; GitHub - ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > OpenVINO > CoreML > TFLite 2、下载目标检测的训练权重 yolov8n.pt 将 yolov8n.pt 放在ultralytics文件夹下 3、数据集分布 注…

基于SpringBoot实现轻量级的动态定时任务调度

在使用SpringBoot框架进行开发时&#xff0c;一般都是通过Scheduled注解进行定时任务的开发&#xff1a; Component public class TestTask {Scheduled(cron"0/5 * * * * ? ") //每5秒执行一次public void execute(){SimpleDateFormat df new SimpleDateFormat(…

视频监控管理平台智能边缘分析一体机视频监控系统客流统计检测算法

在当今数据驱动的时代&#xff0c;客流统计作为商业分析的重要手段&#xff0c;其准确性和实时性对于商家决策具有至关重要的影响。随着技术的发展&#xff0c;智能边缘分析一体机结合了边缘计算与深度学习技术&#xff0c;为客流统计提供了更为高效、精准的解决方案。 首先&am…

湖南源点咨询 正确定义问题是企业市场调研至关重要的第一步

湖南&#xff08;市场调研公司&#xff09;源点咨询认为:正确地定义问题是市场调研过程中至关重要的第一步。 如果没有正确的定义所调研的问题&#xff0c;那么调研目标也会是错误的&#xff0c;并且整个市场调研过程都将会浪费时间和金钱。一家大型的消费品包装企业想要在品牌…

代码随想录算法训练营第二天|【数组】59.螺旋矩阵II

这两天工作的事情有点多&#xff0c;周末又比较懒&#xff0c;所以没有跟上进度。这两天开始补进度。 题目 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&a…

Java代码实现elasticSearch的DSL复合查询

elasticsearch提供DSL&#xff08;domain specific language&#xff09;查询&#xff0c;就是以json格式定义查询条件实现复杂条件查询。 DSL查询分为俩大类&#xff1a; 叶子查询&#xff1a;一般是在特定的字段里查询特定值&#xff0c;属于简单查询&#xff0c;很少单独使…

峟思雨水情智能监测与预警系统核心运作机制解析

雨水情智能监测与预警系统&#xff0c;作为现代水文观测领域的尖端技术集成体&#xff0c;其运作机制深度融合了信息采集的精准性、数据传输的高效性、数据分析的智能化以及预警响应的及时性&#xff0c;构建了全方位、多层次的水文安全防线。以下是对该系统核心运作机制的深入…

C++的入门基础

目录 C的简单介绍命名空间命名空间的使用C的输入与输出缺省参数函数重载 C的简单介绍 本贾尼斯特劳斯特卢普博士在C的基础上增加了面向对象的特性&#xff0c;这时又增加了继承和、类、封装的概念&#xff0c;为后来的面向对象的编程奠定了基础&#xff0c;这被命名为C 命名空…