Java list foreach_java的foreach

Java list foreach_java的foreach例子://使用com.google.guava包创建集合List<String>list=Lists.newArrayList(“a”,”b”,”c”,”d”);//1、正常遍历list.forEach(item->System.out.println(item));//2、根据条件遍历list.forEach…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

例子:

    // 创建集合
    List<String> list =Lists.newArrayList("a","b","c","d");

    //1、正常遍历
    list.forEach(item->System.out.println(item));
    //2、条件遍历
    list.forEach(item->{
        if("b".equals(item)){
            System.out.println(item);
        }

底层实现:

public interface Iterable<T> {

    Iterator<T> iterator();

    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }

       从源码中可以看到:forEach()方法是Iterable<T>接口中的一个方法。Java容器中,所有的Collection子类(List、Set)会实现Iteratable接口以实现foreach功能。forEach()方法里面有个Consumer类型,它是Java8新增的一个消费型函数式接口,其中的accept(T t)方法代表了接受一个输入参数并且无返回的操作。

小结:

        foreach相对于for循环,代码减少了,但是foreach依赖IEnumerable(IEnumerable是一个接口,它定义一个方法GetEnumerator,它返回一个IEnumerator接口,这允许只读访问一个集合,然后实现IEnumerable的集合可以与for-each语句一起使用)。在运行的时候效率低于for循环。当然了,在处理不确定循环次数的循环,或者循环次数需要计算的情况下,使用foreach比较方便。而且foreach的代码经过编译系统的代码优化后,和for循环的循环类似。可以说,foreach语句是for语句的特殊简化版本,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。在复杂的循环设计时,还是应该使用for循环更加的灵活。

  •  如果只是遍历集合或者数组,用foreach好些,快些。
  •  如果对集合中的值进行修改,确定循环次数就要用for循环了。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189498.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • httprunner(11)运行测试报告「建议收藏」

    httprunner(11)运行测试报告「建议收藏」前言受益于pytest的集成,HttpRunnerv3.x可以使用pytest所有插件,包括pytest-html和allure-pytest,也可以实现这2种方式的报告内置html报告pyt

    2022年7月31日
    5
  • ubuntu 16.04 搭建ftp服务器

    ubuntu 16.04 搭建ftp服务器安装vsftpdsudoaptinstallvsftpd配置参数命令行输入vim/etc/vsftpd.conf使用如下配置#Exampleconfigfile/etc/vsftpd.conf##Thedefaultcompiledinsettingsarefairlyparanoid.Thissamplefile#loosensthingsupa

    2022年7月12日
    14
  • Jacob 调用金税系统

    Jacob 调用金税系统1.调用打印方法时,若是有预览弹窗提示,程序会阻塞住,并在控制台打印一行:C:\ProgramFiles(x86)\��Ʊ���\914601007603699430.0\Config\Print\PrinterManager.xml(乱码部分是金税盘中文路径名)经检测,此文件是打印机选择文件,已安装过的的打印机,此文件编码未知,用编辑器试了好几种编码格式打开打开都是一堆乱码。若是…

    2022年6月11日
    36
  • 最大似然估计详解

    最大似然估计详解&nbsp&nbsp最大似然估计是建立在最大似然原理的基础之上。最大似然原理的直观理解是:设一个随机试验有若干个可能的结果A1,A2,…,An,在一次试验中,结果Ak出现,则一般认为实验对Ak的出现最有利,即Ak出现的概率较大。这里用到了”概率最大的事件最可能出现”的直观想法,然后对Ak出现的概率公式求极大值,这样便可解未知参数。下面用一个例子说明最大似然估计的思想方法。&nbsp&nbsp假设一个

    2025年7月2日
    4
  • 内核态与用户态_linux内核态和用户态通信

    内核态与用户态_linux内核态和用户态通信1、高位地址:栈(存放着局部变量和函数参数等数据),向下生长   (可读可写可执行)2、           堆(给动态分配内存是使用),向上生长             (可读可写可执行)3、           数据段(保存全局数据和静态数据)                    (可读可写不可执行)4、低位地址:代码段(保存代码)

    2022年9月17日
    13
  • vite 基础配置

    vite 基础配置兼容老浏览器 默认情况下 Vite 只处理语法转译 且默认不包含任何 polyfill 通过引入 polyfill 可以前往 Polyfill io 查看 这是一个基于用户浏览器 User Agent 字符串自动生成 polyfill 包的服务 通过插件支持 通过插件 vitejs plugin legacy 来支持 它将自动生成传统版本的 chunk 及与其相对应 ES 语言特性方面的 polyfill 兼容版的 chunk 只会在不支持原生 ESM 的浏览器中进行按需加载公共基础路径

    2025年10月27日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号