foreach lambda写法_Java8新特性之forEach+Lambda 表达式遍历Map和List
这是Java8系列的第二篇,今天来说一下Java8中forEach的简单使用。我们使用对比的方式来看应该会看得更加清楚,更能理解:
一、遍历Map
============Java8之前的方式==========
Map items = new HashMap<>();
items.put("A", 10);
items.put("B", 20);
items.put("C", 30);
items.put("D", 40);
items.put("E", 50);
items.put("F", 60);
for (Map.Entry entry : items.entrySet()) {
System.out.println("Item : " + entry.getKey() + " Count : " + entry.getValue());
}
============forEach + Lambda表达式==========
Map items = new HashMap<>();
items.put("A", 10);
items.put("B", 20);
items.put("C", 30);
items.put("D", 40);
items.put("E", 50);
items.put("F", 60);
items.forEach((k,v)->System.out.println("Item : " + k + " Count : " + v));
items.forEach((k,v)->{
System.out.println("Item : " + k + " Count : " + v);
if("E".equals(k)){
System.out.println("Hello E");
}
});
二遍历List:
============Java8之前的方式==========
List items = new ArrayList<>();
items.add("A");
items.add("B");
items.add("C");
items.add("D");
items.add("E");
for(String item : items){
System.out.println(item);
}
============forEach + Lambda表达式==========
List items = new ArrayList<>();
items.add("A");
items.add("B");
items.add("C");
items.add("D");
items.add("E");
//输出:A,B,C,D,E
items.forEach(item->System.out.println(item));
//输出 : C
items.forEach(item->{
if("C".equals(item)){
System.out.println(item);
}
});
引入forEach + Lambda表达式之后,代码量确实减少了很多。
System.out::print :是方法引用
方法引用是当你想把一个方法当作一个“函数指针”传给别的方法用时有用的。
例如说,我有个ArrayList想把里面每个元素都打印出来,每个元素一行。
那么Java 8之前会这样写:
for (ElementType e : list) {
System.out.println(e);
}
从Java 8开始,使用ArrayList的新API加上lambda表达式,我们可以这样写:
list.forEach(e -> System.out.println(e));
而这里的lambda表达式的内容其实只不过就是把参数传给了println()方法,而没有做任何别的事情,所以可以进一步简写为:
list.forEach(System.out::println);
仅此而已。
重点:
System.out是一个PrintStream实例的引用;System.out::println 是对一个实例方法的引用
该引用同时指定了对实例(System.out)的引用以及对方法(PrintStream::println)的引用
System.out::println 不是 System.out.println 的等价物;前者是一个方法引用表达式,而后者不能单独作为一个表达式,而必须在后面跟上由圆括号包围的参数列表来构成方法调用表达式。
System.out::println 可以看作 lambda表达式 e -> System.out.println(e) 的缩写形式。
foreach lambda写法_Java8新特性之forEach+Lambda 表达式遍历Map和List相关推荐
- java8 lambda 接口_Java8新特性之一:Lambda表达式
Java8是自java5之后最重大的一次更新,它给JAVA语言带来了很多新的特性(包括编译器.类库.工具类.JVM等),其中最重要的升级是它给我们带来了Lambda表达式和Stream API. 1. ...
- java lambda 变量_java8新特性-lambda(变量捕获)
1.匿名内部类中的变量捕获 public class App { String s1 = "全局变量"; public void testInnerClass() { String ...
- java8 lambda判断_Java8新特性-Lambda表达式
Predicate接口使用 请在测试类main方法中完成以下需求 已知有Integer[] arr = {-12345, 9999, 520, 0,-38,-7758520,941213} a) 使用 ...
- lambda表达式 java 效率_Java8新特性效率之Lambda
1.我的环境如下: CPU:I5-2430M 2.4GHz 双核四线程 内存:8G JDK版本:1.8.0_25 2.生成数据的核心代码 一个Student类,只有一个age属性,一个方法,是根据参数 ...
- java lambda表达式详解_Java8新特性:Lambda表达式详解
在 Java 版本的历次更新迭代中,Java8 是一个特殊的存在,与以往的版本升级不同.我们对 Java8 似乎抱有更大的期待,因为它是 Java5 之后最重要的一次升级,提供了十多个新特性,其中 L ...
- JDK8新特性简介、Lambda表达式、Stream流常用api介绍
JDK8新特性简介.Lambda表达式.Stream流常用api介绍 接口 Java1.8前接口中是不允许有普通方法的,在Java1.8后允许接口中有普通方法,只需要加上default关键字即可: J ...
- JDK8新特性(一)之Lambda表达式
Java8发布于2014年03月18日,是目前企业中使用最广泛的一个版本.Java8是一次重大的版本升级,带来了很多的新特性: 1.Lambda表达式 2.接口的增强 3.常用的内置函数式接口 4.方 ...
- Java8新特性1:lambda表达式入门--由浅入深,从单发步枪迈向自动步枪
本文主要参照<java8 in action>书中对lambda的讲解,来循序渐进的引入lambda表达式,了解我们为什么,以及怎么样初步学会使用lambda表达式,看完以后你会恍然大悟, ...
- java8 lambda map排序_Java8新特性第3章(Stream API)
转载请注明出处:https://zhuanlan.zhihu.com/p/20540202 Stream作为Java8的新特性之一,他与Java IO包中的InputStream和OutputStre ...
最新文章
- memcached完全剖析–1. memcached的基础
- 【目标检测】Fast RCNN算法详解
- android 等待动画 库,android--AnimationDrawable实现等待动画效果
- matlab中将数据保存为txt文件_matlab中将数据输出保存为txt格式文件的方法 (1)
- 横竖屏切换时候Activity的生命周期的总结
- mysql窗口函数_MySQL8.0窗口函数入门实践及总结
- Python3操作mysql操作类
- oracle存储tar,Linux环境使用TAR命令快速部署安装Oracle
- mysql表死锁查询
- linux多线程入库hive,hiveserver2 定时挂采坑记
- Android Studio常用快捷键汇总(mac)
- 苹果Magic Trackpad2成功被谷歌团队写进去个Linux
- html横线标记_html中横线怎么写代码
- 2018-08博客撰写计划
- Empty DataFrame
- 初等变换和阶梯矩阵【】
- 电子线路与电磁干扰/电磁兼容设计分析
- 移动端电影院社交来啦 约上ta看一场电影
- 神策军丨心中不留退路,才能全力以赴
- Scale 编程基础 A(变量声明、基本数据类型、运算符、文件读写、分支与循环、数据结构)
热门文章
- PHP 在线 编辑 解析
- Apache+Mysql+php+ZenTaoPMS安装配置文档
- .NET配置文件读写实例(附SosoftConfigHelper类)
- Google Earth的十个常用技巧应用
- cad连续标注数字123怎么弄_实例讲解CAD模型与布局中的各种比例
- Mybatis配置文件参数定义
- 设置ntpdate服务开机启动校验时间
- Hadoop RPC框架
- 伪代码书写规范_C++代码书写规范(推荐新手程序员)
- php sql跳过前四条数据,mysql实现每组取前N条记录的sql,以及后续的组数据量限制...