首页 > 其他分享 >lambda中的forEach如何跳出循环

lambda中的forEach如何跳出循环

时间:2023-04-04 16:15:02浏览次数:34  
标签:跳出 abc return list forEach test lambda

lambda中的forEach如何跳出循环

 

      前提

      在Java8中的forEach()中,"break"或"continue"是不被允许使用的,而return的意思也不是原来return代表的含义了。forEach(),说到底是一个方法,而不是循环体,结束一个方法的执行自然是用return。

 

      1.  在Java8中直接写 continue/break

      

      由上图可知:在Java8中直接写 continue会提示Continue outside of loop,break则会提示Break outside switch or loop,continue/break 需要在循环外执行

      2. lambda中使用return

 1     public static void main(String[] args) {
 2         List<String> list = Arrays.asList("test", "abc", "student", "345", "javaTest");
 3 
 4         System.out.println("测试forEach:return>>>>>");
 5 
 6         list.stream().forEach(e -> {
 7             if (e.length() >= 5) {
 8                return;
 9             }
10             System.out.println(e);
11         });
12     }
13 
14     // 测试结果:
15     // test
16     // abc
17     // 345

      由此可以看出:lambda表达式forEach中使用return相当于普通for循环中的continue

      3. lambda中forEach跳出循环的解决方案

      1) 方式一:抛出异常

 1   public static void main(String[] args) {
 2         List<String> list = Arrays.asList("test", "abc", "student", "345", "javaTest");
 3 
 4         try {
 5             list.stream().forEach(e -> {
 6                 if (e.length() >= 5) {
 7                    throw new RuntimeException();
 8                 }
 9                 System.out.println(e);
10             });
11         } catch (Exception e) {
12         }
13    }
14    
15     // 测试结果
16     // test
17     // abc 

     这里不太建议使用抛出异常的方式,因为还需要注意一个地方:

     要确保forEach()方法体内不能有其它代码可能会抛出的异常与自己手动抛出并捕获的异常一样;否则,当真正该因异常导致代码终止的时候,因为咱们手动捕获了并且没做任何处理,反而弄巧成拙。

     2)方式二:anyMatch

     我们不妨换一种思路,跳出的前提肯定是满足了某一条件的,可以所以使用anyMatch方法     

 1  public static void main(String[] args) {
 2         List<String> list = Arrays.asList("test", "abc", "student", "345", "javaTest");
 3 
 4         // anyMatch接收到的表达式值为true时,就会终止循环
 5         list.stream().anyMatch(e -> {
 6             System.out.println(e);
 7             return e.length() >= 5;
 8         });
 9    }
10 
11    // 测试结果
12    // test
13    // abc
14    // student

     3)方式三: filter中的findAny

     同理,采用类似的思路可以使用filter()方法,思路是一样的,其中findAny表示只要找到满足的条件时停止

 1  public static void main(String[] args) {
 2         List<String> list = Arrays.asList("test", "abc", "student", "345", "javaTest");
 3 
 4         // 其中findAny表示只要找到满足的条件时停止
 5         list.stream().filter(e -> {
 6             System.out.println(e);
 7             return e.length() >= 5;
 8         }).findAny();
 9    }
10 
11    // 测试结果
12    // test
13    // abc
14    // student

 

 参考链接:https://www.cnblogs.com/keeya/p/11306254.html

标签:跳出,abc,return,list,forEach,test,lambda
From: https://www.cnblogs.com/hld123/p/17286763.html

相关文章

  • java lambda List 查找 anyMatch() allMatch() noneMatch()
    packagelambda.list;importcn.hutool.core.util.ObjectUtil;importlombok.extern.slf4j.Slf4j;importorg.junit.Test;importpojo.Dome;importjava.util.ArrayList;importjava.util.List;/***@Author:xxx*@date2021/5/14**/@Slf4jpublicclassSe......
  • java lambda List 分组 Collectors.groupingBy
    packagelambda.list;importlombok.extern.slf4j.Slf4j;importorg.junit.Test;importpojo.Dome;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;/***@Author:xxx*@date2021/5/14**/@Sl......
  • lambda表达式相关知识
    等价于匿名函数对象,又称为“闭包”(closure),更便捷,表达更直接。表达式要素包括:1:捕获列表2:参数列表3:mutable修饰符,表达传值或传引用4:noexcept5:返回值类型声明->6:表达式体{...}lambda表达式可接受参数,可返回值,可模板化,也可以通过传值或传引用从闭包范围内访问变量。编译器......
  • 使用 Lambda Web Adapter 在 Lambda 上 构建 web 应用
    背景介绍AmazonLambda可结合AmazonAPIGateway或ApplicationLoadBalancer,使您无需提前启动或管理服务器即可运行基于restfulAPI的应用程序。此时,Lambda将以JSON格式的字符串接收http事件,并将其转换为对象,它将事件对象以及上下文传递给Lambda函数。而对于已经开......
  • Lambda表达式
    LambdanewThread(()->System.out.println("多线程学习....")).start;/**避免匿名内部类定义过多*可以让你的代码看起来整洁*去掉了一些没有意义代码,只留下核心代码***///lambda简化代码过程publicclassTestLambda{  //1.静态内部类  staticclassLike2implem......
  • Lambda 表达式
    目录Lambda表达式简介Lambda表达式入门案例Lambda表达式语法Lambda表达式的省略模式Lambda表达式和匿名内部类的区别函数式接口方法引用Java8新特性中有几个比较主要的特性,Lambda表达式、函数式接口、方法引用和几个新增库StreamAPI、Optional类等。Lambda表达式......
  • python系列教程208——为什么使用lambda
    声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值......
  • 每日一练 for循环 、break 加括号和不加括号的区别 break跳出循环
    题目我的答案是246答案是错的正确答案是2,4因为5的时候已经跳出去了还有括号以及那个静态变量很容易误导break是直接跳出循环了所以是2、4没有6了......
  • 感受JavaLambda之美
    1Stream概述2Stream的创建3Stream的使用4Stream源码解读先贴上几个案例,水平高超的同学可以挑战一下:从员工集合中筛选出salary大于8000的员工,并放置到新的集合里。统计员工的最高薪资、平均薪资、薪资之和。将员工按薪资从高到低排序,同样薪资者年龄小者在前。将员......
  • 细说Python的lambda函数用法
    在Python中有两种函数,一种是def定义的函数,另一种是lambda函数,也就是大家常说的匿名函数。今天我就和大家聊聊lambda函数,在Python编程中,大家习惯将其称为表达式。1.为什么要用lambda函数?先举一个例子:将一个列表里的每个元素都平方。先用def来定义函数,代码如下defsq(x):re......