openJDK之lambda——List的forEach如何实现的
2019独角兽企业重金招聘Python工程师标准>>>
openJDK的版本是openJDK8,如何下载openJDK,请参考我的这篇博客。
这篇内容很简单。
1.List的forEach如何实现
List-1 List的forEach例子
@Test
public void test1() {List<Integer> integers = Arrays.asList(1, 4, 7, 9, 20, 3, 5, -1, -7, 10);integers.forEach(i->{System.out.println(i);});
}
Arrays.asList中底层上是ArrayList,forEach的实现是在接口java.lang.Iterable中,如下List-2所示,JDK8中interface是可以有实现方法的(JDK的特性),由于该方法在Iterable中,所以直接用迭代的方式遍历整个List,之后对每个元素,调用Consumer.accept(T)方法。
List-2 Iterable的forEach方法
/*** Performs the given action for each element of the {@code Iterable}* until all elements have been processed or the action throws an* exception. Unless otherwise specified by the implementing class,* actions are performed in the order of iteration (if an iteration order* is specified). Exceptions thrown by the action are relayed to the* caller.** @implSpec* <p>The default implementation behaves as if:* <pre>{@code* for (T t : this)* action.accept(t);* }</pre>** @param action The action to be performed for each element* @throws NullPointerException if the specified action is null* @since 1.8*/
default void forEach(Consumer<? super T> action) {Objects.requireNonNull(action);for (T t : this) {action.accept(t);}
}
看下面的图1,List接口继承了Iterable接口:
图1 List的类继承图
转载于:https://my.oschina.net/u/2518341/blog/2052146
openJDK之lambda——List的forEach如何实现的相关推荐
- Lambda表达式比较foreach使用
ArrayList<String> arrayList = new ArrayList<>(); new一个集合 //for 循环 for (String list : ar ...
- Java forEach中 Lambda Expr中的 final变量要求
https://my.oschina.net/wadelau/blog/1859419 Java forEach中 Lambda Expr中的 final变量要求 Java8闭包 闭包是一个函数在创建 ...
- Java SE 8新功能介绍:Lambda的遍历,过滤,处理集合和方法增强
在" Java SE 8新功能导览"系列的这篇文章中,我们将深入解释并探索代码,以了解如何使用lambda表达式和方法引用 遍历集合 ,并使用谓词接口过滤它们,实现默认方法在接口中 ...
- Java8 详解Lambda表达式
1. 引言 java.util.function包 我们发现使用lambda表达式的时候,经常需要定义一些接口用来辅助我们的编码,这样就会使得本应轻量级的lambda表达式又变得重量级.那是否存在解决 ...
- Java 8 Lambda 表达式详解
版权声明:本文由吴仙杰创作整理,转载请注明出处:https://segmentfault.com/a/1190000009186509 1. 引言 在 Java 8 以前,若我们想要把某些功能传递给某 ...
- Java8 Lambda不仅仅只是语法糖
前端时间,项目升级到jdk1.8,尝试了下Lambda写法: public static void main(String[] args) { List<String&g ...
- 这是一个有趣的问题,Java 8 Lambda 表达式被编译成了什么?
在了解了Java 8 Lambda的一些基本概念和应用后, 我们会有这样的一个问题: Lambda表达式被编译成了什么? 这是一个有趣的问题,涉及到JDK的具体的实现.本文将介绍OpenJDK对Lam ...
- Java8 之 lambda 表达式、方法引用、函数式接口、默认方式、静态方法
今天我来聊聊 Java8 的一些新的特性,确实 Java8 的新特性的出现,给开发者带来了非常大的便利,可能刚刚开始的时候会有点不习惯的这种写法,但是,当你真正的熟悉了之后,你一定会爱上这些新的特性的 ...
- Java 8 forEach 示例
本篇文章意在简单说明在java 8 中使用 foreach 语法循环一个 Map 和 List 对象. 1. Java 8 forEach 循环 Map对象 1.1 Java 8 以前这样循环一个Ma ...
最新文章
- 学习结构[记录]类型(9) - 变体结构
- 剑桥少儿英语预备级教案(上) unit15 I can draw it.
- 用VC++实现通用的报表控件
- JavaScript 表单编程
- python dicom 器官分割_python+opencv阈值分割
- redius和oracle怎么配置,求个 交换机radius 详细配置案例
- java生命小游戏_Java修炼——飞机生存小游戏
- java修改list中对象的值_Java中List集合的一点总结
- 20170721L08-02-02老男孩Linux运维实战培训初级第八节课课前【上机实战】考试讲解...
- es 中关于 term,match, text, keyword
- Unity的DrawCall
- 最常用计算机文件后缀名,windows系统文件后缀(扩展名)简单介绍,电脑知识普及...
- MongoDB 下载和安装
- html5如何添加图片菜鸟教程,菜鸟入门教程 HTML5的常见用法
- 【重点推荐】PS常用快捷键总结【个人定制版】
- 将图片转化成SVG格式(亲测可行)
- UG476 GT Transceivers文档翻译和自身理解
- 抢占1000万辆级别市场风口,这家国产Tier 1定点车型已超20款
- 换电脑后如何快速同步原先设备上vscode的插件
- 谈商业软件的发展趋势
热门文章
- Windows10系统的使用小技巧四 —— 剪贴板历史记录
- Python中遍历整个列表及注意点(参考书籍Python编程从入门到实践)
- 【听说是线段树】bzoj1012 [JSOI2008]最大数maxnumber
- 常用网站--前端开发类+网页设计类+平面素材类+flash类
- ASP.NET程序中常用的三十三种代码 〔转〕
- linux c编程项目实例,Linux c编程实例_例子
- 嵌入式linux 用虚拟机,如何制作嵌入式Linux虚拟机
- oracle timestamp约束,java.lang.ClassCastException:oracle.sql.TIMESTAMP不能转换为java.sql.Timestamp...
- piczoom兼容性问题_浏览器不兼容原因及解决办法
- js json编辑器_程序员必备编辑器 —— Visual Studio Code