这是Java8系列的第二篇,今天来说一下Java8中forEach的简单使用。我们使用对比的方式来看应该会看得更加清楚,更能理解: 
一、遍历Map

============Java8之前的方式==========
Map<String, Integer> 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<String, Integer> entry : items.entrySet()) {
System.out.println("Item : " + entry.getKey() + " Count : " + entry.getValue());
}
============forEach + Lambda表达式==========
Map<String, Integer> 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<String> 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<String> 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) 的缩写形式。

最新文章

  1. Hosts文件
  2. 如何在MySql中记录SQL日志记录
  3. 是时候放弃Uploadify了
  4. JS高级程序设计2nd部分知识要点6
  5. 虚拟化之vmware DirectPath I/O
  6. Git远程使用技巧
  7. poj1173 解题报告
  8. android ExpandableListView实现不同的布局
  9. Windows|Windows Server 2003单网卡搭建VPN
  10. 安卓TV开发(概述) 智能电视之视觉设计和体验分析
  11. MySQL1:客户端/服务器架构
  12. 【Intellij idea】spring中@Autowired注入失败
  13. 使用Notepad++编译运行C/C++/Python程序
  14. 对Python选修课的期望
  15. thinkphp3.2在nginx下的配置
  16. 通用triggerEvent方法
  17. Spring集成JUnit单元测试框架
  18. EventBus使用详解
  19. Python-CSS高级 题目
  20. maven 单元测试 ( http://www.cnblogs.com/qinpengming/p/5225380.html )

热门文章

  1. maven-3.6.1
  2. 你不知道的js——数组 join
  3. C++ 结构体、模板、类、重载初使用
  4. Java笔记_静态变量和实例变量的区别
  5. npm是干什么的(转)
  6. Oracel 数据库表操作
  7. 基准测试工具:Wrk初识
  8. LeetCode-SQL(一)
  9. 《微信小程序项目开发实战:用WePY、mpvue、Taro打造高效的小程序》(笔记1)WePY开发环境的安装
  10. HTML5深入学习之 WebSQL 数据库