普通for循环、增强for循环、普通foreach、stream foreach的区别

复制代码
总结(>代表好于):
1.性能:一万左右数据 普通for = parallelstream foreach > 增强版for > 普通foreach > stream foreach
       十万左右及以上数据 普通for = 增强版for < 普通foreach < stream foreach < parallelstream foreach
2.continue break 在普通for环境和增强for循环中可以使用,在两种foreach中不能使用
3.return 在普通for环境和增强for循环中是指定方法返回值,而在两种foreach中是起到continue类似的作用
4.入参都可以是空集合,都不能是null
java 复制代码
package com.xin.demo.streamdemo;

import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;

public class StreamForeachTest {
    public static void main(String[] args) {
        List<String> nameList = new ArrayList<>();
        nameList.add("xiaohua1");
        nameList.add("xiaohua2");
        nameList.add("xiaohua3");
        nameList.add("xiaohua4");
        nameList.add("xiaohua5");

        // 1.普通for循环
        // 可以接受空集合,但是不能是null,否则nameList.size()会报空指针异常
        // 普通for循环里可以有continue,break,return是用来指定方法返回值的
        getCommonList(nameList);

        // 2.增强版for循环
        // 可以接受空集合,但是不能是null,否则会报空指针异常
        // java5引入,增强版for循环里可以有continue,break,return是用来指定方法返回值的
        getEnhanceList(nameList);

        // 3.普通forEach
        // 可以接受空集合,但是不能是null,否则会报空指针异常
        // 不可以使用continue和break,return不是用来指定方法返回值的,
        // 而是结束本次循环开始下次循环,相当于continue
        getCommonForEach(nameList);

        // 4.stream forEach
        // 可以接受空集合,但是不能是null,否则会报空指针异常
        // 不可以使用continue和break,return不是用来指定方法返回值的,
        // 而是结束本次循环开始下次循环,相当于continue
        getStreamForEach(nameList);

        // 总结(>代表好于):
        // 1.性能:一万左右数据 普通for = parallelstream foreach > 增强版for > 普通foreach > stream foreach
        //       十万左右及以上数据 普通for = 增强版for < 普通foreach < stream foreach < parallelstream foreach
        // 2.continue break 在普通for环境和增强for循环中可以使用,在两种foreach中不能使用
        // 3.return 在普通for环境和增强for循环中是指定方法返回值,而在两种foreach中是起到continue类似的作用
        // 4.入参都可以是空集合,都不能是null

    }

    public static List<String> getCommonList(List<String> nameList) {
        List<String> commonNameList = new ArrayList<>();
        for (int i = 0; i < nameList.size(); i++) {
            if (StringUtils.equals(nameList.get(i), "xiaohua2")) {
                commonNameList.add(nameList.get(i));
                continue;
            }

            if (StringUtils.equals(nameList.get(i), "xiaohua3")) {
                commonNameList.add(nameList.get(i));

                return commonNameList;
            }
        }

        System.out.println(commonNameList);
        return commonNameList;
    }

    public static List<String> getEnhanceList(List<String> nameList) {
        List<String> commonNameList = new ArrayList<>();
        for (String name : nameList) {
            if (StringUtils.equals(name, "xiaohua2")) {
                commonNameList.add(name);
                continue;
            }

            if (StringUtils.equals(name, "xiaohua3")) {
                commonNameList.add(name);

                return commonNameList;
            }
        }

        System.out.println(commonNameList);
        return commonNameList;
    }

    public static List<String> getCommonForEach(List<String> nameList) {
        List<String> commonNameList = new ArrayList<>();
        nameList.forEach(name -> {
            if (StringUtils.equals(name, "xiaohua2")) {
                commonNameList.add(name);
                return;
            }

            if (StringUtils.equals(name, "xiaohua3")) {
                commonNameList.add(name);

                // 这里会报错
//                return commonNameList;

            }
        });

        System.out.println(commonNameList);
        return commonNameList;
    }

    public static List<String> getStreamForEach(List<String> nameList) {
        List<String> commonNameList = new ArrayList<>();
        nameList.stream().forEach(name -> {
            if (StringUtils.equals(name, "xiaohua2")) {
                commonNameList.add(name);
                return;
            }

            if (StringUtils.equals(name, "xiaohua3")) {
                commonNameList.add(name);

                // 这里会报错
//                return commonNameList;

            }
        });

        System.out.println(commonNameList);
        return commonNameList;
    }
}
相关推荐
鬼手点金1 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
paopaokaka_luck2 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
Wang's Blog3 小时前
Java 项目实战: 交友项目 - Dubbo 的内部结构与一次调用的完整链路
java·dubbo
Wang's Blog3 小时前
Java 项目实战: 交友项目 - Dubbo 入门引导
java·dubbo·交友
蜗牛互联网3 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
SL_staff4 小时前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈
Shaoshing4 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
dd聊技术4 小时前
Prompt 从代码常量搬进数据库:改一句话,不用再发一次版
java·后端
ly76894 小时前
Spring Data MongoDB 批量写入实践:BulkOperations 批大小与写关注权衡
java·mongodb·spring·批量写入·bulkoperations·写关注·mongotemplate
TAKETODAY4 小时前
Netty 是怎么把 HTTP 请求交给 MVC 的?一个请求的完整链路
java·netty