当前位置: 首页 > news >正文

跳出Lambda表达式forEach()循环解决思路

背景

在一次需求开发时,发现使用Lambda的forEach()跳不出循环。如下示例代码,想在遍历满足条件时跳出循环。

    public static void main(String[] args) {List<Integer> list = Arrays.asList(1, 4, 5, 7, 9, 11);list.forEach(e -> {if (e % 2 == 0) {System.out.println("foreach -- " + e);return;}System.out.println(e);});System.out.println(list);}

运行结果:
在这里插入图片描述
可以看出在forEach()中使用return并不会退出整个循环,和普通for循环return意义不同,仍会继续遍历。

原因

在普通for循环中,跳出循环使用break,结束本次循环使用continue,结束for循环所在的整个执行方法使用return。

      for (Integer e : list) {if (e % 2 == 0) {break;  // return直接整个函数终止执行返回,break for循环方法终止执行}System.out.println(e);}

Lambda表达式中,函数式接口Consumer 的抽象方法accept引用实现循环体中的逻辑。
所以forEach()处理一个个的执行方法accept(t),非循环体。在执行方法中使用return将处理方法返回,但不能结束整个forEach()。

    default void forEach(Consumer<? super T> action) {Objects.requireNonNull(action);for (T t : this) {action.accept(t);}}
@FunctionalInterface
public interface Consumer<T> {void accept(T t);default Consumer<T> andThen(Consumer<? super T> after) {Objects.requireNonNull(after);return (T t) -> { accept(t); after.accept(t); };}
}

优化方案

跳出Lambda表达式forEach()循环解决思路有以下几种:

  • 抛异常
    在遍历时,若需要跳出循环,通过抛异常结束forEach()循环,在循环外catch异常不处理。首先此方案不够优雅,其次若循环逻辑块中有其他抛异常的地方,会受影响不易发现。
   public static void main(String[] args) {List<Integer> list = Arrays.asList(1, 4, 5, 7, 9, 11);try {list.forEach(e -> {if (e % 2 == 0) {System.out.println("foreach -- " + e);throw new RuntimeException("跳出循环");}System.out.println(e);});} catch (Exception e) {}System.out.println(list);}

执行结果:
在这里插入图片描述

  • 使用普通for循环
    使用普通for循环替代Lambda表达式forEach()循环,在代码块中使用break即可跳出循环。

  • 使用Lambda表达式filter()实现
    换个实现思路,诉求是遍历list遇到第一个满足条件的item跳出循环,那么转成过滤整个list,返回第一个满足条件的item。

Optional<Integer> first = list.stream().filter(e -> e % 2 == 0).findFirst();
System.out.println(first.orElse(null));
  • 使用anyMatch()
    原理类似filter(),遇到满足条件的item跳出遍历返回。
      list.stream().anyMatch(e -> {if (e % 2 == 0) {System.out.println("跳出循环 -- " + e);return true;}System.out.println(e);return false;});

执行结果:
在这里插入图片描述

总结

Lambda表达式forEach()函数不支持return跳出循环,不建议使用抛异常方式结束循环,可以考虑使用普通for或利用Lambda表达式的函数实现。

相关文章:

跳出Lambda表达式forEach()循环解决思路

背景 在一次需求开发时&#xff0c;发现使用Lambda的forEach()跳不出循环。如下示例代码&#xff0c;想在遍历满足条件时跳出循环。 public static void main(String[] args) {List<Integer> list Arrays.asList(1, 4, 5, 7, 9, 11);list.forEach(e -> {if (e % 2 …...

2023年度AWS SAP直冲云霄训练营学习分享

AWS在公有云市场一直处于行业领先地位&#xff0c;其培训认证体系也是非常的完善的。而且经常在国内组织一些技术论坛&#xff0c;技术分享&#xff0c;公开课&#xff0c;训练营等技术活动。 AWS训练营适合希望学习和考取AWS助理级架构师/专家级架构师&#xff08;AWS SAA/AW…...

2023高教社杯 国赛数学建模E题思路 - 黄河水沙监测数据分析

1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响&#xff0c; 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…...

06_快速入门案例实战之电商网站商品管理:集群健康检查,文档CRUD

document数据格式电商网站商品管理案例&#xff1a;背景介绍简单的集群管理商品的CRUD操作&#xff08;document CRUD (3) 集群的管理 1.快速检查集群的健康状态: cat api 可以查看es中各种各样的数据 GET /_cat/health?v epoch timestamp cluster status node…...

机车整备场数字孪生 | 图扑智慧铁路

机车整备场是铁路运输系统中的重要组成部分&#xff0c;它承担着机车的维修、保养和整备工作&#xff0c;对保障铁路运输的运维和安全起着至关重要的作用。 随着铁路运输的发展、机车技术的不断进步&#xff0c;以及数字化转型的不断推进&#xff0c;数字孪生技术在机车整备场…...

Fair|Fur —— Geometry Nodes

目录 Groom Blend Groom Fetch Groom Pack Groom Unpack Groom Switch Guide Advect Guide Collide With VDB Guide Deform Guide Draw Guide Groom Guide Group Guid Grow to Surface Guide Initialize Guide Mask Guide Partition Guide Process Guide Skin…...

java八股文面试[设计模式]——行为型模式

目录 策略模式 观察者模式 责任链模式 模板方法模式 状态模式 行为型模式关注的是各个类之间的相互作用&#xff0c;将职责划分清楚&#xff0c;使得我们的代码更加地清晰。 策略模式 策略模式太常用了 下面设计的场景是&#xff0c;我们需要画一个图形&#xff0c;可选…...

【送书活动】网络安全(黑客)自学

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

如何让数据成为企业的生产力?

为什么有的企业投入大量的人力、物力、财力做数字化转型建设最终做了个寂寞&#xff01;企业领导没看到数字化的任何价值&#xff01; 如果要问企业数字化转型建设最核心的价值体现是什么&#xff0c;大部分人都会说是&#xff1a;数据&#xff01; 然而&#xff0c;不同的人…...

监控 -- linux中的一些系统性能状态指令、Prometheus

目录 监控查看性能相关命令Prometheus1、安装和配置2、将 NFS服务器和LB服务器作为exporter采集数据3、在prometheus server里添加安装exporter程序的服务器 grafana出图工具 监控 监控的目的是获取数据&#xff0c;通过数据分析了解机器是否正常运行 查看性能相关命令 查看c…...

跳槽面试:如何转换工作场所而不失去优势

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

TINA如何导入spice模型

本文介绍如何使用TINA仿真运算放大器电路。TINA是TI公司自己的spice仿真软件&#xff0c;各个大厂为了更好的让客户使用自己的器件&#xff0c;都纷纷推出自己的仿真软件&#xff0c;ADI也有类似的软件&#xff0c;有机会我们介绍&#xff0c;这期我们主要简单介绍下如何使用TI…...

C. MEX Repetition Pinely Round 2 (Div. 1 + Div. 2)

Problem - C - Codeforces 题目大意&#xff1a;有一个长度为n的数组&#xff0c;数组中每个数字互不相同&#xff0c;范围都是0到n&#xff0c;每次操作将每一个数字从左到右依次变成当前数组的MEX&#xff0c;问k次操作后的数组 1<n<1e5&#xff1b;1<k<1e9 思…...

C++ 运算符

一键三连支持一下吧 C 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 内置了丰富的运算符&#xff0c;并提供了以下类型的运算符&#xff1a; 算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符 本章将逐一介绍算术运算符、关系运算符、逻辑…...

数据结构day07(栈和队列)

今日任务 链式队列&#xff1a; head.h #ifndef __HEAD_H__ #define __HEAD_H__#include <stdio.h> #include <stdlib.h>typedef int datatype; typedef struct link_list{datatype data;struct link_list* next; }link,*linkp; typedef struct circulate_line_t…...

八、Linux中的用户与文件权限

1、普通用户与特权用户 (1)在Linux中&#xff0c;和windows中一样。用户分为普通用户和特权用户。 特权用户&#xff1a;拥有系统管理的绝对权限。普通用户&#xff1a;普通用户的权限受到限制&#xff0c;只拥有基本的权限&#xff0c;某些操作没有权限。 (2)Linux中的特权…...

岛屿数量 -- 二维矩阵的dfs算法

岛屿数量 又被称为 FloodFill 算法 class NumIslands:"""floodFill 算法https://leetcode.cn/problems/number-of-islands/"""def solution(self, grid: List[List[str]]) -> int:res 0m, n len(grid), len(grid[0])for i in range(m):for…...

JDBC学习汇总

概念 JDBC&#xff1a;JDBC是Java提供的一套用来操作数据库的接口 通过Java代码操作数据库 1.确定数据库是可以正常使用&#xff08;MySQL服务是否正常开启&#xff09; 2.确定MySQL的账号和密码是正确的 3.确定MySQL版本和MySQL驱动版本匹配 4.在工程&#xff08;module&#…...

HarmonyOS—UI开发性能提升的推荐方法

注&#xff1a;本文转载自HarmonyOS官网文档 开发者若使用低性能的代码实现功能场景可能不会影响应用的正常运行&#xff0c;但却会对应用的性能造成负面影响。本章节列举出了一些可提升性能的场景供开发者参考&#xff0c;以避免应用实现上带来的性能劣化。 使用数据懒加载 开…...

英文科技论文写作与发表-常见英语写作困扰(第3章)

1.常见英语写作困扰 英语写作应该是越精炼越好。写完一个句子&#xff0c;建议尝试删除某个或某些单词&#xff0c;如果删除后句子意义基本不变&#xff0c;就应该删除。 1.1 所有格 使用所有格可以省去至少一个单词&#xff08;of&#xff09;,如&#xff1a;Kangs book T…...

Go并发读写竞争漏洞:结构体赋值引发的密钥泄露

1. 这不是段子&#xff0c;是真实发生的“裸奔”现场CVE-2026-27944——这个编号刚在NVD&#xff08;美国国家漏洞库&#xff09;公开时&#xff0c;我正盯着一台生产环境的API网关日志发呆。它没报错&#xff0c;没超时&#xff0c;但每分钟有3700次请求在返回200的同时&#…...

3大核心功能!茉莉花插件让Zotero中文文献管理效率提升90%

3大核心功能&#xff01;茉莉花插件让Zotero中文文献管理效率提升90% 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件&#xff0c;用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在为Zoter…...

taotoken api key的权限细分与审计日志对安全管理的价值

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 taotoken api key的权限细分与审计日志对安全管理的价值 在构建基于大模型的应用时&#xff0c;API Key 的管理往往是安全链条中最…...

PXE启动Ubuntu时,你的initrd.img配置对了吗?一个参数让无盘启动快3倍

PXE启动Ubuntu时initrd.img的深度调优指南当你在凌晨三点盯着PXE启动进度条缓慢爬升时&#xff0c;是否想过那个看似简单的initrd.img文件里藏着多少性能玄机&#xff1f;作为运维老兵的我在经历了数十次无盘系统部署后&#xff0c;发现90%的PXE启动性能问题都源于initrd配置不…...

20 万行代码,30 分钟理清——Understand Anything 让你的代码库变成一张可交互的知识图谱

加入新团队&#xff0c;面对二十万行代码库&#xff0c;从哪开始读&#xff1f;读完本文你可以&#xff1a;用 3 条命令把项目变成可交互知识图谱&#xff0c;理解 5 代理分析管线的运作原理&#xff0c;并判断这个工具适合不适合你的场景。 &#x1f3af; 这个项目解决什么问题…...

Anthropic为何如此反华

美国政客对中国进行科技封锁&#xff0c;本不是什么新闻。但一个商业公司宁可损失上亿美元的收入也要禁止中国人访问他们的AI就有点魔症了。我们不禁要问&#xff1a;为什么我们现在看到Anthropic的CEO Dario Amodei在所有场合都持强硬的反华立场&#xff0c;不免感觉有些奇怪。…...

机器学习分子动力学揭秘镁腐蚀原子机制:从DFT到MLMD的跨尺度模拟实践

1. 项目概述与核心价值镁合金&#xff0c;作为最轻的工程结构金属&#xff0c;在航空航天、生物医疗和下一代储能技术&#xff08;如镁空气电池&#xff09;领域被寄予厚望。然而&#xff0c;一个长期困扰材料科学家和工程师的“阿喀琉斯之踵”是其在水性环境中过快的腐蚀速率。…...

Gradio模型部署全攻略:从Hugging Face Spaces到AWS EC2实战

1. 项目概述与部署价值当你花了几周甚至几个月时间&#xff0c;终于训练出一个效果不错的机器学习模型&#xff0c;比如一个能识别猫狗图片的分类器&#xff0c;或者一个能生成诗歌的文本模型&#xff0c;接下来的问题往往不是技术上的&#xff0c;而是工程上的&#xff1a;怎么…...

准最优最小二乘框架:破解PDE非齐次边界数值求解难题

1. 项目概述&#xff1a;当最小二乘遇上非齐次边界——一个准最优框架的构建在偏微分方程&#xff08;PDE&#xff09;的数值求解领域&#xff0c;最小二乘法一直以其数学上的优雅和稳定性吸引着研究者。其核心思想直白而有力&#xff1a;将微分方程问题转化为一个最小化残差范…...

视觉着陆系统预测不确定性:从亚像素回归到RAIM完整性监测

1. 项目概述&#xff1a;当视觉着陆系统学会“自我怀疑”在自动驾驶汽车和无人机领域&#xff0c;基于视觉的导航早已不是新鲜事。但当场景切换到载人航空器&#xff0c;尤其是飞机着陆这个“一锤子买卖”上&#xff0c;事情就变得截然不同了。这里没有“容错率”这个词&#x…...