这是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相关推荐

  1. java8 lambda 接口_Java8新特性之一:Lambda表达式

    Java8是自java5之后最重大的一次更新,它给JAVA语言带来了很多新的特性(包括编译器.类库.工具类.JVM等),其中最重要的升级是它给我们带来了Lambda表达式和Stream API. 1. ...

  2. java lambda 变量_java8新特性-lambda(变量捕获)

    1.匿名内部类中的变量捕获 public class App { String s1 = "全局变量"; public void testInnerClass() { String ...

  3. java8 lambda判断_Java8新特性-Lambda表达式

    Predicate接口使用 请在测试类main方法中完成以下需求 已知有Integer[] arr = {-12345, 9999, 520, 0,-38,-7758520,941213} a) 使用 ...

  4. lambda表达式 java 效率_Java8新特性效率之Lambda

    1.我的环境如下: CPU:I5-2430M 2.4GHz 双核四线程 内存:8G JDK版本:1.8.0_25 2.生成数据的核心代码 一个Student类,只有一个age属性,一个方法,是根据参数 ...

  5. java lambda表达式详解_Java8新特性:Lambda表达式详解

    在 Java 版本的历次更新迭代中,Java8 是一个特殊的存在,与以往的版本升级不同.我们对 Java8 似乎抱有更大的期待,因为它是 Java5 之后最重要的一次升级,提供了十多个新特性,其中 L ...

  6. JDK8新特性简介、Lambda表达式、Stream流常用api介绍

    JDK8新特性简介.Lambda表达式.Stream流常用api介绍 接口 Java1.8前接口中是不允许有普通方法的,在Java1.8后允许接口中有普通方法,只需要加上default关键字即可: J ...

  7. JDK8新特性(一)之Lambda表达式

    Java8发布于2014年03月18日,是目前企业中使用最广泛的一个版本.Java8是一次重大的版本升级,带来了很多的新特性: 1.Lambda表达式 2.接口的增强 3.常用的内置函数式接口 4.方 ...

  8. Java8新特性1:lambda表达式入门--由浅入深,从单发步枪迈向自动步枪

    本文主要参照<java8 in action>书中对lambda的讲解,来循序渐进的引入lambda表达式,了解我们为什么,以及怎么样初步学会使用lambda表达式,看完以后你会恍然大悟, ...

  9. java8 lambda map排序_Java8新特性第3章(Stream API)

    转载请注明出处:https://zhuanlan.zhihu.com/p/20540202 Stream作为Java8的新特性之一,他与Java IO包中的InputStream和OutputStre ...

最新文章

  1. memcached完全剖析–1. memcached的基础
  2. 【目标检测】Fast RCNN算法详解
  3. android 等待动画 库,android--AnimationDrawable实现等待动画效果
  4. matlab中将数据保存为txt文件_matlab中将数据输出保存为txt格式文件的方法 (1)
  5. 横竖屏切换时候Activity的生命周期的总结
  6. mysql窗口函数_MySQL8.0窗口函数入门实践及总结
  7. Python3操作mysql操作类
  8. oracle存储tar,Linux环境使用TAR命令快速部署安装Oracle
  9. mysql表死锁查询
  10. linux多线程入库hive,hiveserver2 定时挂采坑记
  11. Android Studio常用快捷键汇总(mac)
  12. 苹果Magic Trackpad2成功被谷歌团队写进去个Linux
  13. html横线标记_html中横线怎么写代码
  14. 2018-08博客撰写计划
  15. Empty DataFrame
  16. 初等变换和阶梯矩阵【】
  17. 电子线路与电磁干扰/电磁兼容设计分析
  18. 移动端电影院社交来啦 约上ta看一场电影
  19. 神策军丨心中不留退路,才能全力以赴
  20. Scale 编程基础 A(变量声明、基本数据类型、运算符、文件读写、分支与循环、数据结构)

热门文章

  1. PHP 在线 编辑 解析
  2. Apache+Mysql+php+ZenTaoPMS安装配置文档
  3. .NET配置文件读写实例(附SosoftConfigHelper类)
  4. Google Earth的十个常用技巧应用
  5. cad连续标注数字123怎么弄_实例讲解CAD模型与布局中的各种比例
  6. Mybatis配置文件参数定义
  7. 设置ntpdate服务开机启动校验时间
  8. Hadoop RPC框架
  9. 伪代码书写规范_C++代码书写规范(推荐新手程序员)
  10. php sql跳过前四条数据,mysql实现每组取前N条记录的sql,以及后续的组数据量限制...