• Java 8跳过本次循环,继续执行以及跳出循环,终止循环的代码实例


    在Java8之前,最开始使用for i 循环,很老旧,后来有了高级的for each 循环,然后这个跳出本次循环和跳出所有的for循环,都简单,稍微没见过的就是跳出多层for循环。

    然后就是Java8出的foreach循环,这个循环里面,break和continue都不管用啦。需要使用return,这个只能跳过本次循环,还是会继续执行for循环的,那么怎么跳出这个Java8的foreach循环呢?

    下面对所有的循环,都来了一次操作。

    看看如何,跳出当前循环,继续执行;或者直接跳出for循环;或者跳出多层for循环。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    package com.lxk.java8.lambdaTest;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Optional;
    /**
     * 跳出for循环
     *
     * @author LiXuekai on 2018/10/23
     */
    public class BreakForeach {
     public static void main(String[] args) {
      int max = 5;
      List<String> list = Arrays.asList("123", "12345", "1234", "4321", "1234567", "5678");
      continueForeachJava8(max, list);
      System.out.println();
      breakForeachJava8(max, list);
      System.out.println();
      continueFor(max, list);
      System.out.println();
      breakFor(max, list);
      System.out.println();
      breakManyFor(max, list);
     }
     /**
      * Java8跳过一次foreach循环,然后继续执行。
      */
     private static void continueForeachJava8(int max, List<String> list) {
      list.forEach(s -> {
       if (s.length() >= max) {
        return;
       }
       System.out.println(s);
      });
     }
     /**
      * 跳出Java8的foreach循环
      * 还这没找到,怎么跳出
      */
     private static void breakForeachJava8(int max, List<String> list) {
      //这么做是不对的
      //try {
      // list.forEach(s -> {
      //  if (s.length() >= max) {
      //   throw new Exception();
      //  }
      //  System.out.println(s);
      // });
      //} catch (Exception e) {
      // System.out.println(e.getMessage());
      //}
      //看需求,建议使用如下之一。
      Optional<String> result = list.stream().filter(s -> s.length() >= max).findFirst();
      System.out.println(result.orElse(null));
      boolean lxk = list.stream().anyMatch(s -> s.length() >= max);
      System.out.println(lxk);
     }
     /**
      * continue 跳过本次循环,继续执行。
      */
     private static void continueFor(int max, List<String> list) {
      for (String s : list) {
       if (s.length() >= max) {
        continue;
       }
       System.out.println(s);
      }
     }
     /**
      * break 是直接跳出for循环,不再继续执行for循环到代码了。
      */
     private static void breakFor(int max, List<String> list) {
      for (String s : list) {
       if (s.length() >= max) {
        break;
       }
       System.out.println(s);
      }
     }
     /**
      * break lxk 是直接跳出多层for循环,不再继续执行for循环到代码了。
      */
     private static void breakManyFor(int max, List<String> list) {
      lxk:
      for (String s1 : list) {
       System.out.println("第一层:" + s1);
       for (String s2 : list) {
        System.out.println("第二层:" + s2);
        for (String s3 : list) {
         if (s3.length() >= max) {
          break lxk;
         }
         System.out.println("第三层:" + s3);
        }
       }
      }
     }
    }

    下面是上面的代码的运行结果,可以对照着看一下。

  • 相关阅读:
    C#常用功能和通用模块开发资料
    常用工具&网址
    Web前端开发、常见问题及解决方法
    MQTT专题(Spring boot + maven整合MQTT、EMQ搭建MQTT服务器和客户端模拟工具)
    Spring常用注解
    ActiveMQ专题(服务器搭建、配置和项目应用)
    HTTP RESTful服务开发 spring boot+Maven +Swagger
    设计模式-命令模式
    设计模式-责任链模式
    设计模式—建造者模式(Builder)
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/12160338.html
Copyright © 2020-2023  润新知