Java基础 - Stream流操作

Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。

Stream流操作

遍历/匹配(foreach、find、match)
List<Integer> list = Arrays.asList(7, 6, 9, 3, 8, 2, 1);
// 遍历输出符合条件的元素
list.stream().filter(x -> x > 6).forEach(System.out::println);
// 匹配第一个
Optional<Integer> findFirst = list.stream().filter(x -> x > 6).findFirst();
// 匹配任意(适用于并行流)
Optional<Integer> findAny = list.parallelStream().filter(x -> x > 6).findAny();
// 是否包含符合特定条件的元素
boolean anyMatch = list.stream().anyMatch(x -> x > 6);
筛选(filter)
List<Integer> list = Arrays.asList(6, 7, 3, 8, 1, 2, 9);
Stream<Integer> stream = list.stream();
stream.filter(x -> x > 7).forEach(System.out::println);
聚合(max、min、count)
List<Integer> list = Arrays.asList(7, 6, 9, 4, 11, 6);
// 自然排序
Optional<Integer> max = list.stream().max(Integer::compareTo);
// 自定义排序
Optional<Integer> max2 = list.stream().max(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1.compareTo(o2);}
});
System.out.println("自然排序的最大值:" + max.get());
System.out.println("自定义排序的最大值:" + max2.get());
映射(map、flatMap)

映射,可以将一个流的元素按照一定的映射规则映射到另一个流中。
分为map和flatMap:
map:接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
flatMap:接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。

规约(reduce)

归约,也称缩减,顾名思义,是把一个流缩减成一个值,能实现对集合求和、求乘积和求最值操作。

收集(collect)

collect 收集,就是把一个流收集起来,最终可以是收集成一个值也可以收集成一个新的集合。

归集(toList、toSet、toMap)

因为流不存储数据,那么在流中的数据完成处理后,需要将流中的数据重新归集到新的集合里。toList、toSet和toMap比较常用,另外还有toCollection、toConcurrentMap等复杂一些的用法。

统计(count、averaging)

Collectors提供了一系列用于数据统计的静态方法:

  • 计数:count
  • 平均值:averagingInt、averagingLong、averagingDouble
  • 最值:maxBy、minBy
  • 求和:summingInt、summingLong、summingDouble
  • 统计以上所有:summarizingInt、summarizingLong、summarizingDouble
分组(partitioningBy、groupingBy)

分区:将stream按条件分为两个Map。
分组:将集合分为多个Map。

接合(joining)

joining可以将stream中的元素用特定的连接符(没有的话,则直接连接)连接成一个字符串。

规约(reducing)

Collectors类提供的reducing方法,相比于stream本身的reduce方法,增加了对自定义归约的支持。

排序(sorted)

sorted,中间操作。有两种排序:
1、sorted():自然排序,流中元素需实现Comparable接口
2、sorted(Comparator com):Comparator排序器自定义排序

去重、合并(distinct、skip、limit)
  • distinct() 通过 hashCode() 和 eqauls() 方法来判断重复元素。
  • skip方法在跳过流的第一个给定元素之后返回一个由该流的其余元素组成的流。
  • limit方法返回一个新的流,该流的元素被截断为给定的最大长度。limit方法包含前n个元素,其中n小于或等于给定的最大大小。

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

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

相关文章

二叉树最大宽度

文章目录 前言二叉树最大宽度1.题目解析2.算法原理3.代码编写 总结 前言 二叉树最大宽度 1.题目解析 给你一棵二叉树的根节点 root &#xff0c;返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点&#xff08;即…

商城项目【尚品汇】08异步编排

文章目录 1.线程的创建方式1.1继承Thread类&#xff0c;重写run方法1.2实现Runnable接口&#xff0c;重写run方法。1.3实现Callable接口&#xff0c;重新call方法1.4以上三种总结1.5使用线程池创建线程1.5.1线程池创建线程的方式1.5.2线程池的七大参数含义1.5.3线程池的工作流程…

Java面向对象-[封装、继承、多态、权限修饰符]

Java面向对象-封装、继承、权限修饰符 一、封装1、案例12、案例2 二、继承1、案例12、总结 三、多态1、案例 四、权限修饰符1、private2、default3、protected4、public 一、封装 1、案例1 package com.msp_oop;public class Girl {private int age;public int getAge() {ret…

44.SQLserver中 DATEFROMPARTS() 函数的语法

1.基本语法&#xff1a; DATEFROMPARTS(year, month, day) 2.SQL参数 该函数接受三个参数&#xff0c;具体描述如下&#xff1a; year - 一个整数值&#xff0c;指定日期的’YEAR’部分&#xff0c;表示为整数。 month - 一个整数值&#xff0c;指定日期的’MONTH’部分。 day…

Redis系列-5 Redis分布式锁

背景&#xff1a; 本文介绍Redis分布式锁的内容&#xff0c;包括Redis相关命令和Lua脚本的介绍&#xff0c;以及操作分布式锁的流程与消息&#xff0c;最后结合Redission源码介绍分布式锁的实现原理。 1.基本命令 1.1 基本键值对的设置 设值: set key value 取值: get key …

SPI通信协议

SPI通信结介绍 W25Q64是一个Flash存储器芯片&#xff0c;内部可以存储8M字节的数据&#xff0c;并且是掉电不丢失的。 四根通信线&#xff1a;SCK&#xff08;Serial Clock&#xff09;串行时钟线、MOSI&#xff08;Master Output Slave Input&#xff09;主机输出从机输入、M…

【十大排序算法】快速排序

在乱序的世界中&#xff0c;快速排序如同一位智慧的园丁&#xff0c; 以轻盈的手法&#xff0c;将无序的花朵们重新安排&#xff0c; 在每一次比较中&#xff0c;沐浴着理性的阳光&#xff0c; 终使它们在有序的花园里&#xff0c;开出绚烂的芬芳。 文章目录 一、快速排序二、…

Java 为什么重写equals方法时一定要重写hashCode方法

思考 hashCode和 equals 有一个协定&#xff0c;就是如果两个对象相等&#xff0c;equals判断为true,如果你只重写了equals&#xff0c;你自己定义了一些逻辑去判断两个对象的相等&#xff0c;比如id 和 name ,如果两个对象的id和name相等则相等&#xff0c;但是因为你没重写h…

profile-3d-contrib,github三维立体图的使用

图片展示: 提示: 这个profile-3d-contrib存储库有时候会出现问题,导致又有使用这个存储库svg的用户显示出现问题. 参考: https://zhuanlan.zhihu.com/p/681786778 原仓库链接&#xff1a; GitHub - yoshi389111/github-profile-3d-contrib: This GitHub Action creates a Gi…

【算法刷题 | 动态规划08】6.9(单词拆分、打家劫舍、打家劫舍||)

文章目录 21.单词拆分21.1题目21.2解法&#xff1a;动规21.2.1动规思路21.2.2代码实现 22.打家劫舍22.1题目22.2解法&#xff1a;动规22.2.1动规思路22.2.2代码实现 23.打家劫舍||23.1题目23.2解法&#xff1a;动规23.2.1动规思路23.2.2代码实现 21.单词拆分 21.1题目 给你一…

java中的异常-异常处理(try、catch、finally、throw、throws)+自定义异常

一、概述 1、java程序员在编写程序时提前编写好对异常的处理程序&#xff0c;在程序发生异常时就可以执行预先设定好的处理程序&#xff0c;处理程序执行完之后&#xff0c;可以继续向后执行后面的程序 2、异常处理程序是在程序执行出现异常时才执行的 二、5个关键字 1、tr…

在CentOS 7.9上安装和配置mitmproxy的详细步骤

以下是在CentOS 7.9上安装和配置mitmproxy的详细步骤&#xff1a; 更新系统&#xff1a;首先&#xff0c;打开终端并运行以下命令来更新您的系统&#xff1a; sudo yum update这将确保所有的包都是最新的。 安装Python和pip&#xff1a;mitmproxy需要Python 3.6或更高版本。Ce…

Redis实战篇02

1.分布式锁Redisson 简单介绍&#xff1a; 使用setnx可能会出现的极端问题&#xff1a; Redisson的简介&#xff1a; 简单的使用&#xff1a; 业务代码的改造&#xff1a; private void handleVoucherOrder(VoucherOrder voucherOrder) {Long userId voucherOrder.getUserI…

2024真机项目

项目需求&#xff1a; 1. 172.25.250.101 主机上的 Web 服务要求提供 www.exam.com 加密站点&#xff0c;该站点在任何路由可达 的主机上被访问&#xff0c;页面内容显示为 "Hello&#xff0c;Welcome to www.exam.com !"&#xff0c;并提供 content.exam.com/yum/A…

数据:人工智能的基石 | Scale AI 创始人兼 CEO 亚历山大·王的创业故事与行业洞见

引言 在人工智能领域&#xff0c;数据被誉为“新石油”&#xff0c;其重要性不言而喻。随着GPT-4的问世&#xff0c;AI技术迎来了新的浪潮。众多年轻创业者纷纷投身这一领域&#xff0c;Scale AI的创始人兼CEO亚历山大王&#xff08;Alexander Wang&#xff09;就是其中的佼佼…

什么是Java?

什么是Java&#xff1f;java是什么&#xff1f;下面我们来总结一下。 java是什么&#xff1f; java是一个静态编程语言&#xff0c;具有强大的多线程特征&#xff0c;目前java不仅采用c语言的优点&#xff0c;还去掉了一些多继承指针&#xff0c;等复杂的概念&#xff0c;我们…

Linux C/C++ 进程控制

Linux C/C 进程控制 1.信号2.进程终止3.调用可执行程序4.进程创建5.僵尸进程6.多进程与信号8.共享内存9.循环队列10. 信号量的基本概念11.多进程的生产消费者模型 1.信号 ​ 信号(signal)是软件中断&#xff0c;是进程之间相互传递消息的一种方法&#xff0c;用于通知进程发生…

回文数java算法

回文数是指从左往右读和从右往左读都一样的数字。要判断一个数字是否是回文数&#xff0c;可以将该数字转换成字符串&#xff0c;然后将字符串分割为字符数组&#xff0c;最后比较数组的对应位置的字符是否相同。 以下是一个判断回文数的Java算法&#xff1a; public static …

Git配置 安装及使用

团队开发的神 找工作必备 环境变量 配置好环境后 打开终端环境 winr cmd 我习惯在桌面打开&#xff0c;然后进入相应的文件夹 &#xff08;文件夹结构&#xff09; &#xff08;个人感觉能用cmd不用git&#xff0c;cmd更好用一些&#xff09; 进入对应的文件夹 填写自己对…

docker安装rabbitmq详解

目录 1、安装 1-1.查看rabbitmq镜像 1-2.下载Rabbitmq的镜像 1-3.创建并运行rabbitmq容器 1-4.查看启动情况 1-5.启动web客户端 1-6.访问rabbitmq的客户端 2..遇到的问题 解决方法: 1、安装 1-1.查看rabbitmq镜像 docker search rabbitmq 1-2.下载Rabbitmq的镜像 拉…