java8新语法
Lambda表达式和函数接口(Functional Interface)
// lambda expressions
public static void DemoLambda() {
// 不使用lambda表达式
Runnable runnable1 = new Runnable() {
@Override
public void run() {
System.out.println("do not use lambda expressions!!");
}
};
runnable1.run(); // 使用lambda表达式
Runnable runnable2 = () -> {
System.out.println("use lambda expressions!!");
};
runnable2.run();
}
可以看到使用了lambda表达式后代码简洁了很多。lambda表达式实际就是匿名方法,他由两部分构成:参数和方法体——方法名和返回类型(通过函数体来推断)给省略了。例子中的参数为空,所以给了一个“()”代表参数为空;“->”代表使用了lambda表达式(c#中使用=>);“{}”中的内容为方法体,如果只有一句代码可以省略掉“{}”,和for循环一样。
另一个是函数接口。表示只有一个方法的接口就叫函数接口,可以使用注解 @FunctionalInterface 来标识这个接口是函数接口,但不是必须的。比如 Runnable 这个接口就是函数接口(只有一个方法),所以lambda表达式所实现的方法就是run方法。
方法引用
方法引用就是lambda的一种简化写法,相当于把方法当成一个变量赋值给另一个方法,这个方法接受的参数是一个函数接口,他有3中实现:
1. 方法是static的:类名::方法名,例如:Math::sin
2. 方法不是static的:对象::方法名,例如:StringBuilder sb = new StringBuilder(); sb::append
3. 构造方法:类名::new
 public class MethodDemo {
     // 这个方法接受一个函数式接口
     public static void HasFunctionalInterface(FunctionalInterfaceDemo fid) {
         fid.doSoming("运行在:");
     }
     // 3中实现方法
     public static void main(String[] args) {
         // 第一种实现:new一个匿名的对象
         HasFunctionalInterface(new FunctionalInterfaceDemo() {
             @Override
             public void doSoming(String str) {
                 System.out.println(str + "以前的实现");
             }
         });
         // 第二种实现:使用lambda表达式
         // e 是参数,System.out.println("运行在:lambda表达式"); 是方法体
         HasFunctionalInterface(e -> { System.out.println("运行在:lambda表达式"); });
         // 第三种实现:使用方法引用
         FunctionalInterfaceImplements fif = new FunctionalInterfaceImplements();
         HasFunctionalInterface(fif::doSoming);
     }
 }
 // 实现了函数式接口
 class FunctionalInterfaceImplements implements FunctionalInterfaceDemo {
     public void doSoming(String str) {
         System.out.println(str + "方法的引用");
     }
 }
 // 一个函数式接口
 @FunctionalInterface
 interface FunctionalInterfaceDemo {
     void doSoming(String str);
 }
java8还更新了很多替他的特性,这里只是粗略描述一个新的语法
java8新语法的更多相关文章
- 【Java8新特性】Lambda表达式基础语法,都在这儿了!!
		
写在前面 前面积极响应读者的需求,写了两篇Java新特性的文章.有小伙伴留言说:感觉Lambda表达式很强大啊!一行代码就能够搞定那么多功能!我想学习下Lambda表达式的语法,可以吗?我的回答是:没 ...
 - java8新特性全面解析
		
在Java Code Geeks上有大量的关于Java 8 的教程了,像玩转Java 8--lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java ...
 - Java8新特性
		
Java8新特性 Java8主要的新特性涵盖:函数式接口.Lambda 表达式.集合的流式操作.注解的更新.安全性的增强.IO\NIO 的改进.完善的全球化功能等. 1.函数式接口 Java 8 引入 ...
 - Java8新特性之二:方法引用
		
上一节介绍了Java8新特性中的Lambda表达式,本小节继续讲解Java8的新特性之二:方法引用.方法引用其实也离不开Lambda表达式. 1.方法引用的使用场景 我们用Lambda表达式来实现匿名 ...
 - Java8 新特性 | 如何风骚走位防止空指针异常
		
文章整理翻译自 https://winterbe.com/posts/2015/03/15/avoid-null-checks-in-java/ 文章首发于个人网站: https://www.exce ...
 - Java8新特性-Lambda表达式是什么?
		
目录 前言 匿名内部类 函数式接口 和 Lambda表达式语法 实现函数式接口并使用Lambda表达式: 所以Lambda表达式是什么? 实战应用 总结 前言 Java8新特性-Lambda表达式,好 ...
 - java8新特性(二)_lambda表达式
		
最近一直找java8相关新特性的文章,发现都太没有一个连贯性,毕竟大家写博客肯定都有自己的侧重点,这里找到一本书,专门介绍java8新特性的,感觉大家可以看看<写给大忙人看的JavaSE8> ...
 - 乐字节-Java8新特性之方法引用
		
上一篇小乐介绍了<Java8新特性-函数式接口>,大家可以点击回顾.这篇文章将接着介绍Java8新特性之方法引用. Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引用 ...
 - 乐字节-Java8新特性之函数式接口
		
上一篇小乐带大家学过 Java8新特性-Lambda表达式,那什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口 ...
 
随机推荐
- IFrame 获取内容
			
试试: iframe.contentwindow.document.documentElement.innerHTML document.getElementById("MyIFrame ...
 - JQuery操作Table元素
			
使用Jquery操作Table中的tr向上或向下移动,以及全选和反选操作. 点击Table Head中的复选框,全选或反选表格中所有的复选框; 选中复选框,点击Up 按钮, tr上移;点击 Down ...
 - magento提速的一些小技巧,列举manegnto网站提速的
			
下面列举一些可以 Magneot提速 的方法 本文系宇讯原创Magento教程,转载请注明出处. 1:使用CSS /图像精灵Magento提速. 一种图像精灵放入一个单一的图像,并通过特定的CSS类调 ...
 - 循环列表的Java实现,解决约瑟夫环问题
			
import java.util.Scanner; /** * 循环列表的Java实现,解决约瑟夫环问题 * * @author LIU * */ public class LinkedList { ...
 - USB 描述符
			
标准的USB设备有5种USB描述符:设备描述符,配置描述符,字符串描述符,接口描述符,端点描述符. // Standard Device Descriptor typedef struct { u8 ...
 - 代码静态分析工具--PMD,Findbugs,CheckStyle
			
最近学习Mybatis的官方文档,看到了[项目文档]一节有很多内容没有见过,做个笔记,理解一下. PMD 扫描Java源代码,查找潜在的问题,如: 可能的bugs,如空的try/catch/final ...
 - Particles.js基于Canvas画布创建粒子原子颗粒效果
			
文章目录 使用方法 自定义参数 相关链接 Particles.js是一款基于HTML5 Canvas画布的轻量级粒子动画插件,可以设置粒子的形状.旋转.分布.颜色等属性,还可以动态添加粒子,效果非常炫 ...
 - Nagios:企业级系统监控方案
			
在大多数情况下Cacti + RRDtool已经实现对系统各种参数的监测.但很多企业可能不满足于仅仅监测系统基本参数的需求,而是需要监测除基本参数之外的各种应用程序的运行状况.很显然在这种情况下对于一 ...
 - hdu 2665  Kth number
			
划分树 /* HDU 2665 Kth number 划分树 */ #include<stdio.h> #include<iostream> #include<strin ...
 - Win下循环进入目录启动执行某任务
			
cd tldlq for /D %%s in (*) do ( cd %%s start "" LoginGate.exe start "" GameGate. ...