Java8实战-总结18
Java8实战-总结18
- 使用流
- 筛选和切片
- 用谓词筛选
- 筛选各异的元素
- 截短流
- 跳过元素
使用流
流让你从外部迭代转向内部迭代。这样,就用不着写下面这样的代码来显式地管理数据集合的迭代(外部迭代)了:
List<Dish> vegetarianDishes = new ArrayList<>();for(Dish d : menu) {if(d.isVegetarian()) {vegetarianDishes.add(d);}}
可以使用支持filter和collect操作的Stream API(内部迭代)管理对集合数据的迭代。只需要将筛选行为作为参数传递给filter方法就行了。
import static java.util.stream.Collectors.toList;List<Dish> vegetarianDishes =menu.stream().filter(Dish::isVegetarian).collect(toList());
这种处理数据的方式很有用,因为你让Stream API管理如何处理数据。这样Stream API就可以在背后进行多种优化。此外,使用内部迭代的话,Stream API可以决定并行运行你的代码。这要是用外部迭代的话就办不到了,因为你只能用单一线程挨个迭代。
下面会介绍Stream API支持的许多操作。这些操作能让你快速完成复杂的数据查询,如筛选、切片、映射、查找、匹配和归约。接下来,会看看一些特殊的流:数值流、来自文件和数组等多种来源的流,最后是无限流。
筛选和切片
来看看如何选择流中的元素:用谓词筛选,筛选出各不相同的元素,忽略流中的头几个元素,或将流截短至指定长度。
用谓词筛选
Streams接口支持filter方法。该操作会接受一个谓词(一个返回boolean的函数)作为参数,并返回一个包括所有符合谓词的元素的流。例如,可以像下图所示的这样,筛选出所有素菜,创建一张素食菜单:
List<Dish> vegetarianMenu = menu.stream().filter(Dish::isVegetarian)//方法引用检查菜肴是否适合素食者.collect(toList());

筛选各异的元素
流还支持一个叫作distinct的方法,它会返回一个元素各异(根据流所生成元素的hashCode和equals方法实现)的流。例如,以下代码会筛选出列表中所有的偶数,并确保没有重复。
List<Integer> numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4);
numbers.stream().filter(i -> i % 2 == 0).distinct().forEach(System.out::println);

截短流
流支持limit(n)方法,该方法会返回一个不超过给定长度的流。所需的长度作为参数传递给limit。如果流是有序的,则最多会返回前n个元素。比如,你可以建立一个List,选出热量超过300卡路里的头三道菜:
List<Dish> dishes = menu.stream().filter(d -> d.getCalories() > 300).limit(3).collect(toList());
下图展示了filter和limit的组合。可以看到,该方法只选出了符合谓词的头三个元素,然后就立即返回了结果。
请注意limit也可以用在无序流上,比如源是一个set。这种情况下,limit的结果不会以任何顺序排列。

跳过元素
流还支持skip(n)方法,返回一个扔掉了前n个元素的流。如果流中元素不足n个,则返回一个空流。请注意,limit(n)和skip(n)是互补的!例如,下面的代码将跳过超过300卡路里的头两道菜,并返回剩下的。图5-4展示了这个查询。
List<Dish> dishes = menu.stream().filter(d -> d.getcalories()> 300).skip(2).collect(toList ());

测验:筛选你将如何利用流来筛选前两个荤菜呢?
答案:可以把filter和limit复合在一起来解决这个问题,并用collect(toList())将流转换成一个列表。
List<Dish> dishes =menu.stream().filter(d -> d.getType()== Dish.Type.MEAT).limit(2).collect(toList();
相关文章:
Java8实战-总结18
Java8实战-总结18 使用流筛选和切片用谓词筛选筛选各异的元素截短流跳过元素 使用流 流让你从外部迭代转向内部迭代。这样,就用不着写下面这样的代码来显式地管理数据集合的迭代(外部迭代)了: List<Dish> vegetarianDishes new ArrayList<>…...
ARM编程模型-指令流水线
流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一。 1. 3级流水线 到ARM7为止的ARM处理器使用简单的3级流水线,它包括下列流水线级。 (1࿰…...
邮件营销:高效的节日宣传方式
每个国家都有当地的传统节日,像是我国刚过去的端午节,即将迎来的中秋节、国庆节。我们除了会进行一些传统习俗外,各路商家还会趁这个机会开启促销活动。 对于公司来讲,抓住每一次营销活动都可能会带来更高的营销额,或…...
Leetcode109. 有序链表转换二叉搜索树
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给定一个单链表的头节点 head ,其中的元素 按升序排序 ,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度…...
基于Googlenet深度学习网络的人脸身份识别matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..................................................................... % 定义修改的范围 …...
vue2 生命周期,工程化开发入门
一、今日目标 1.生命周期 生命周期介绍生命周期的四个阶段生命周期钩子声明周期案例 2.工程化开发入门 工程化开发和脚手架项目运行流程组件化组件注册 二、Vue生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好)什么…...
Elasticsearch 分布式搜索——聚合
1.聚合的种类 聚合常见的有三类: **桶(Bucket)**聚合:用来对文档做分组 TermAggregation:按照文档字段值分组,例如按照品牌值分组、按照国家分组Date Histogram:按照日期阶梯分组,例…...
苹果将在iPhone16系列中引入微透镜阵列技术,亮度更高、功耗更低
根据韩国媒体The Elec的报道,苹果公司正与其主要供应商三星和LG展开合作,以评估并衡量是否有必要在明年的iPhone 16系列中引入微透镜(micro-lens)技术来升级屏幕。 这项方案集中在OLED屏幕架构上,计划采用微透镜阵列&…...
Window10 安装 Lua
1、下载地址:https://luabinaries.sourceforge.net/download.html 2、下载 3、解压后共有4个文件,这里我把这几个文件放到如下目录 D:\Program Files\lua-5.4.2\bin 4、定义环境变量 5、打开 powershell,运行 lua54 -v PS C:\Windows\syste…...
Centos替代方案分析(Ubuntu篇)
最受欢迎Linux操作系统 在上百个Linux版本中,Ubuntu和CentOS是最受欢迎的开源操作系统,以其稳定性、高性能和广泛的社区支持而闻名。Ubuntu以友好的用户界面和多样的应用程序生态系统吸引着广大用户,适用于桌面和服务器。而CentOS则因其与RH…...
关于计数以及Index返回订单号升级版可以控制年月日累计(不重复)(sqlite)
1数据库创建: RAGMA foreign_keys false;-- ---------------------------- -- Table structure for OrderSIndex -- ---------------------------- DROP TABLE IF EXISTS "OrderSIndex"; CREATE TABLE "OrderSIndex" ("Id" INTEGER…...
前端实现在线预览文件
一、实现word、xls、ppt文件的在线预览功能 1、通过调用微软的在线预览功能, word、ppt、xls文件实现在线预览的方式比较简单可以直接通过调用微软的在线预览功能实现(预览前提:资源必须是公共可访问的) <iframe srchttps://…...
海外有哪些流行的支付方式?
大家好,我是老三,很久没写支付相关的文章了,这期给大家讲一讲,海外都在用哪些支付方式。 简介 我们先来看下两个主流电商产品的美国站的支付方式: 在国内,想必大家都习惯了支付宝和微信支付二分天下&…...
服务器数据恢复-重组RAID导致RAID6数据丢失的数据恢复案例
服务器数据恢复环境: 一台存储设备中有一组由12块硬盘组建的RAID6磁盘阵列,上层采用EXT3文件系统,共划分3个LUN。 服务器故障&分析: 存储设备在运行过程中RAID6阵列突然不可用,管理员对故障存储进行了重新分配RAI…...
Redis数据库持久化---RDB(Redis DataBase)概念与实操
一、概念 1redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。 RDB(Redis DataBase):是在不同的时间点,将redis存储的数据生成快照并存…...
分部署存储Ceph
文章目录 Ceph一.deploy-ceph部署1.系统环境初始化1.1 修改主机名,DNS解析1.2 时间同步1.3 配置apt基础源与ceph源1.4关闭selinux与防火墙1.5 创建 ceph 集群部署用户cephadmin1.6分发密钥 2. ceph部署2.1 安装ceph 部署工具2.2 初始化 mon 节点2.3 安装ceph-mon服务…...
项目:点餐系统3mysql知识回顾MySQL客户端
连接数据库 mysql -uroot -p 密码:空 一、第三方库:MySQL 数据库-存储并管理数据的仓库,是一个C/S架构 MySQL客户端通过sql来告诉MySQL服务器,自己需要做什么操作 1.sql语句 sql:structure query language结构化查询…...
docker命令学习
docker vscode插件出现的问题 docker命令 docker images (查看所有的镜像) docker ps -a (查看所有的容器) docker ps (查看运行的容器) docker run imageID docker run --gpus all --shm-size8g -it imag…...
【STM32教程】第二章 通用输入输出口GPIO
资料下载链接: 链接:https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwdjauj 提取码:jauj 1. GPIO的基本结构 1.1 概述 GPIO(General Purpose Input Output)意思是通用输入输出口可配置为8种输入输出模式&a…...
2023.9 - java - ArrayList
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。 ArrayList 继承了 AbstractList ,并实现了 List 接口。 ArrayList 类位于 java.util 包中,使用前需要引入它&…...
30天学会AI工程师|Day 14:自己实现一个小工具,你才会真正理解 Agent 是怎么“动起来”的
你先知道一件事 昨天你理解了 Tool Calling 的概念,今天最好亲手做一个最小工具。 为什么这一步重要 你完全可以从一个非常简单的例子开始。比如做一个计算器工具,输入两个数字和一个运算符,返回结果。或者做一个时间查询工具,返回…...
ETS2LA:卡车模拟游戏中的自动化路径跟随系统如何让你轻松驾驭长途运输?
ETS2LA:卡车模拟游戏中的自动化路径跟随系统如何让你轻松驾驭长途运输? 【免费下载链接】Euro-Truck-Simulator-2-Lane-Assist Plugin based interface program for ETS2/ATS. 项目地址: https://gitcode.com/gh_mirrors/eur/Euro-Truck-Simulator-2-L…...
Omnizart代码实现原理:解密音乐AI背后的深度学习算法
Omnizart代码实现原理:解密音乐AI背后的深度学习算法 【免费下载链接】omnizart Omniscient Mozart, being able to transcribe everything in the music, including vocal, drum, chord, beat, instruments, and more. 项目地址: https://gitcode.com/gh_mirrors…...
如何快速掌握LuaJIT字节码还原:面向开发者的完整指南
如何快速掌握LuaJIT字节码还原:面向开发者的完整指南 【免费下载链接】luajit-decompiler https://gitlab.com/znixian/luajit-decompiler 项目地址: https://gitcode.com/gh_mirrors/lu/luajit-decompiler LuaJIT反编译器(LuaJIT Raw-Bytecode D…...
智读致用|《谷歌亚马逊如何做产品》6|赢在数据驱动:抓住核心指标,就能让产品“开口说话”
核心问题:产品发布后,怎么判断它到底成没成功?团队争论需求优先级时,凭什么说“这个比那个重要”? 上一篇文章解决了“产品能不能用”,现在要回答更根本的问题:它值不值得继续投入? …...
Fansly下载器完整指南:3分钟掌握免费离线下载技巧
Fansly下载器完整指南:3分钟掌握免费离线下载技巧 【免费下载链接】fansly-downloader Easy to use fansly.com content downloading tool. Written in python, but ships as a standalone Executable App for Windows too. Enjoy your Fansly content offline anyt…...
ViGEmBus:让Windows游戏外设兼容性不再是难题
ViGEmBus:让Windows游戏外设兼容性不再是难题 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否曾经遇到过心爱的游戏手柄在Windows上无法被…...
千问 LeetCode 2478.完美分割的方案数 public int beautifulPartitions(String s, int k, int minLength)
好的,这是 LeetCode 2478 "完美分割的方案数" 的 Java 实现。 解题思路 核心是动态规划 + 前缀和优化: 1. 定义状态:dp[i][j] 表示前 i 个字符分成 j 段的方案数 2. 状态转移:对于每个可能的分割点,需要满足: - 当前段长度 ≥ minLength - 当前段首字…...
传奇3手游网站下载 元素搭配攻略 新手快速上手复古服
官方出版资质:传奇3光通版手游由传奇3G原班人马打造,出版单位华东师范大学电子音像出版社有限公司,审批文号新广出审〔2016〕2183号,出版物号ISBN978-7-7979-0843-6,运营主体安徽游昕网络科技有限公司,官网…...
本地视频怎么去水印?2026最全去水印方法与软件推荐
如果你经常从各个视频平台保存视频素材,水印问题往往让人头疼。本地视频上的水印可能是平台logo、主播昵称、或者其他标识。今天就为你盘点本地视频去水印的多种方法,以及2026年最实用的去水印软件推荐,助你快速解决视频水印困扰。 本地视频去…...
