1. import java.util.ArrayList;
  2. import java.util.Comparator;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.function.Consumer;
  7.  
  8. import org.junit.Test;
  9.  
  10. /*
  11. * 一、Lambda 表达式的基础语法:Java8中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符
  12. * 箭头操作符将 Lambda 表达式拆分成两部分:
  13. *
  14. * 左侧:Lambda 表达式的参数列表
  15. * 右侧:Lambda 表达式中所需执行的功能, 即 Lambda 体
  16. *
  17. * 语法格式一:无参数,无返回值
  18. * () -> System.out.println("Hello Lambda!");
  19. *
  20. * 语法格式二:有一个参数,并且无返回值
  21. * (x) -> System.out.println(x)
  22. *
  23. * 语法格式三:若只有一个参数,小括号可以省略不写
  24. * x -> System.out.println(x)
  25. *
  26. * 语法格式四:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句
  27. * Comparator<Integer> com = (x, y) -> {
  28. * System.out.println("函数式接口");
  29. * return Integer.compare(x, y);
  30. * };
  31. *
  32. * 语法格式五:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写
  33. * Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
  34. *
  35. * 语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”
  36. * (Integer x, Integer y) -> Integer.compare(x, y);
  37. *
  38. * 上联:左右遇一括号省
  39. * 下联:左侧推断类型省
  40. * 横批:能省则省
  41. *
  42. * 二、Lambda 表达式需要“函数式接口”的支持
  43. * 函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。 可以使用注解 @FunctionalInterface 修饰
  44. * 可以检查是否是函数式接口
  45. */
  46. public class TestLambda2 {
  47.  
  48. @Test
  49. public void test1(){
  50. int num = 0;//jdk 1.7 前,必须是 final
  51.  
  52. Runnable r = new Runnable() {
  53. @Override
  54. public void run() {
  55. System.out.println("Hello World!" + num);
  56. }
  57. };
  58.  
  59. r.run();
  60.  
  61. System.out.println("-------------------------------");
  62.  
  63. Runnable r1 = () -> System.out.println("Hello Lambda!");
  64. r1.run();
  65. }
  66.  
  67. @Test
  68. public void test2(){
  69. Consumer<String> con = x -> System.out.println(x);
  70. con.accept("我大尚硅谷威武!");
  71. }
  72.  
  73. @Test
  74. public void test3(){
  75. Comparator<Integer> com = (x, y) -> {
  76. System.out.println("函数式接口");
  77. return Integer.compare(x, y);
  78. };
  79. }
  80.  
  81. @Test
  82. public void test4(){
  83. Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
  84. }
  85.  
  86. @Test
  87. public void test5(){
  88. // String[] strs;
  89. // strs = {"aaa", "bbb", "ccc"};
  90.  
  91. List<String> list = new ArrayList<>();
  92.  
  93. show(new HashMap<>());
  94. }
  95.  
  96. public void show(Map<String, Integer> map){
  97.  
  98. }
  99.  
  100. //需求:对一个数进行运算
  101. @Test
  102. public void test6(){
  103. Integer num = operation(100, (x) -> x * x);
  104. System.out.println(num);
  105.  
  106. System.out.println(operation(200, (y) -> y + 200));
  107. }
  108.  
  109. public Integer operation(Integer num, MyFun mf){
  110. return mf.getValue(num);
  111. }
  112. }

java8 - 2的更多相关文章

  1. Java8实战分享

    虽然很多人已经使用了JDK8,看到不少代码,貌似大家对于Java语言or SDK的使用看起来还是停留在7甚至6. Java8在流式 or 链式处理,并发 or 并行方面增强了很多,函数式的风格使代码可 ...

  2. java8中lambda表达式的应用,以及一些泛型相关

    语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...

  3. Android Studio2.1.2 Java8环境下引用Java Library编译出错

    转载请注明出处:http://www.cnblogs.com/LT5505/p/5685242.html 问题:在Android Studio2.1.2+Java8的环境下,引用Java Librar ...

  4. Java笔记——Java8特性之Lambda、方法引用和Streams

    Java8已经推出了好一段时间了,而掌握Java8的新特性也是必要的,如果要进行Spring开发,那么可以发现Spring的官网已经全部使用Java8来编写示例代码了,所以,不学就看不懂. 这里涉及三 ...

  5. 关于Java8函数式编程你需要了解的几点

    函数式编程与面向对象的设计方法在思路和手段上都各有千秋,在这里,我将简要介绍一下函数式编程与面向对象相比的一些特点和差异. 函数作为一等公民 在理解函数作为一等公民这句话时,让我们先来看一下一种非常常 ...

  6. Java8并发教程:Threads和Executors

    来之:ImportNew 欢迎阅读我的Java8并发教程的第一部分.这份指南将会以简单易懂的代码示例来教给你如何在Java8中进行并发编程.这是一系列教程中的第一部分.在接下来的15分钟,你将会学会如 ...

  7. java8 学习系列--NIO学习笔记

    近期有点时间,决定学习下java8相关的内容: 当然了不止java8中新增的功能点,整个JDK都需要自己研究的,不过这是个漫长的过程吧,以自己的惰性来看: 不过开发中不是有时候讲究模块化开发么,那么我 ...

  8. Java8函数式编程

    在Java8的 java.util.function中包含以下几个接口 1.Function,先上源码 /* * Copyright (c) 2010, 2013, Oracle and/or its ...

  9. Java8闭包

    闭包在很多语言中都存在,例如C++,C#.闭包允许我们创建函数指针,并把它们作为参数传递,Java编程语言提供了接口的概念,接口中可以定义抽象方法,接口定义了API,并希望用户或者供应商来实现这些方法 ...

  10. Java8新特性——接口的默认方法和类方法

    Java8新增了接口的默认方法和类方法: 以前,接口里的方法要求全部是抽象方法,java8以后允许在接口里定义默认方法和类方法: 不同的是: 默认方法可以通过实现接口的类实例化的对象来调用,而类方法只 ...

随机推荐

  1. Docker Swarm应用--lnmp部署WordPress

    一.简介 目的:使用Docker Swarm 搭建lnmp来部署WordPress 使用Dockerfile构建nginx.php镜像 将构建的镜像上传docker私有仓库 使用volume做work ...

  2. linux命令总结之lsof命令

    简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控 ...

  3. asp.net获取当前页面的url地址

    设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.jb5 ...

  4. webpack+vue+iview使用vue-cli脚手架搭建

    1.安装nodejs环境 下载node.js.安装成功后再控制台输入 node -v 出现版本号则,安装成功. 如果没有出现 版本号 而是出现node 不是内部命令的话 需要配置一下环境变量,如果已经 ...

  5. php 中 FastCGI与cgi的关系,何为fastcgi

    FastCGI是语言无关的.可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持 在内存中并因此获得较高的性能.众所周知,CGI解释器的反复加载是CGI性能低下的主要原因, 如果CGI解释器 ...

  6. windows查找端口占用/ 终结端口占用 ------------windows小技巧

    前沿 我是一名小程序员,经常通过一些类似tomcat,jettry 等服务器工具 调试项目.有时候莫名其妙的就会出现 程序关闭不正常的情况!去查端口又死活找不到!最后只能重启电脑 后面,在网上查了一些 ...

  7. Python入门系列教程(二)字符串

    字符串 1.字符串输出 name = 'xiaoming' print("姓名:%s"%name) 2.字符串输入 userName = raw_input('请输入用户名:') ...

  8. 英雄无敌3开源引擎vcmi的编译安装

    TAGS: Heroes3, vcmi, opensourceDATE: 2013-08-23 vcmi是什么? vcmi 是经典的 SLG 英雄无敌3 的开源游戏引擎.原来的英雄无敌3只能在Wind ...

  9. 20155306 2016-2017-2 《Java程序设计》第七周学习总结

    20155306 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第十三章 时间与日期 三种时间: 格林威治标准时间(GMT)的正午是太阳抵达天空最高点之时, ...

  10. JS设计模式——11.适配器模式

    适配器模式概述 适配器模式可用来在现有接口和不兼容的类之间进行适配.使用这种模式的对象又叫包装器(wrapper). 适配器特点 从表面看,适配器模式很像门面模式.她们都要对别的对象进行包装并改变其呈 ...