Java Lambda表达式(Java Lambda Expression)
来源:互联网 发布:linux 查看java进程号 编辑:程序博客网 时间:2024/05/22 17:22
从匿名内部类说起
在Java中,存在这么一个问题,就是当一个
匿名内部类
的实现非常简单,就像一个Interface
只包含一个方法,此时该内部类
的语法看起来就相当的笨拙且极不简洁,此时我们可能更希望能通过一个函数式的方法来解决这样的问题,传递给他一个参数,然后完成某个动作,在Java8
中Lambda表达式
可以帮我们完成这样的工作。
- 我们先看一个
匿名内部类
的例子
public class AnonymouseDemo { //内部接口 interface InnerInterface{ //定义一个say()方法,没有参数 public abstract void say(); } public static void main(String[] args) { /** * 实现匿名内部类 -- new InnerInterface{ } */ InnerInterface inter=new InnerInterface() { @Override public void say() { System.out.println("Hello Inner Interface!"); } }; inter.say(); }}
- 运行结果 :
Hello Inner Interface!
从结果来看,实现一个输出
Hello Inner Interface
并不是那么简洁,现在,很多语言都支持Lambda表达式
Java8的新特性里面就包含了Lambda表达式。
- Java 中
Lambda表达式
的语法为:( argument )->(body)
即( 参数 )->(body)
(int a,int b)->{return a-b} //表示输出一句话 (String demo) -> { System.out.println(demo); } //表示返回666 return 666 () -> 666 () ->{ return 0.618 };
- 有了
Lambda表达式
上面的匿名内部类
可以可以可以这样
public class LambdaDemo { //内部接口 interface InnerInterface{ //定义一个say()方法,没有参数 public abstract void say(); } public static void main(String[] args) { //使用Lambda表达式,没有参数 InnerInterface inner=()->System.out.println("Lambda Expression!"); inner.say(); }}
- 运行结果 :
Lambda Expression!
相比而言
Lambda Expression
是不是更简单呢? 那么问题来了!?什么样的情况下我们能使用Lambda Expression
表达式呢?,还记得前面提到的函数式的方法吗?
Functional Interfaces
函数式接口
.
A functional interface is any interface that contains only one abstract method. (A functional interface may contain one or more default methods or static methods.)
- 函数式接口是一个仅包含一个抽象方法的接口
- 一个函数式接口可能包含一或者多个Default或Static方法(接口扩展类方法)
- 函数式接口可以用
@FunctionalInterface
注解进行标记,当被标记的接口不是一个正确的函数式接口
的话,将会产生编译级别的Error
- Java中函数式接口有很多,例如Runable,Thread,Consumer,Predicate等 ,可以这样使用
Lambda Expression
。
//JDK中Runnable 接口的定义,便是一个函数式接口,用@FunctionalInterface进行标记@FunctionalInterfacepublic interface Runnable { public abstract void run();}//Anonymouse ClassRunnable run=new Runnable() { @Override public void run() { System.out.println("Old Way"); }};//Lambda ExpressionRunnable r = () -> System.out.println("Ha Ha ..Lambda Expression!");//Anonymouse Classnew Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub System.out.println("Old Way"); } }).start();//Lambda Expression ...new Thread( () -> System.out.println("Ha Ha ..Lambda Expression!")).start();
*以上都是不带参数的
Lambda Expression
示例,以下讲解带参数的Lambda Expression
以及泛型函数式接口
示例
/** * @author junit * 带参数的 泛形函数式接口 */@FunctionalInterfacepublic interface FunctionalClassParamters<T> { /** * @param n * @return */ public abstract T getResults(T n);}/** * @param args * Lambda Expression Test * 带参数的Lambda 表达式 */public static void main(String[] args){ System.out.println("With Parameters.."); /* * 指定参数类型为String */ FunctionalClassParamters<String> parameters; /* * * 可以指定参数类型,也可以不指定参数类型。 * parameters=(String n)->n;也是合法的。 * 当只有一个参数时,可以不用括号如: * parameters=n->n 也是合法的。 * */ parameters=(n)-> n; System.out.println(paramters.getResults("String Type")); /* * 指定参数类型为Integer */ FunctionalClassParamters<Integer> integer_parameters; integer_parameters=(p)->{ p++; p*=100; return p; }; System.out.println(integer_parameters.getResults(50));}
- 运行结果:
With Parameters..
String Type
5100
0 0
- Java Lambda表达式(Java Lambda Expression)
- Lambda Expression In Java
- Java Lambda Expression
- Java 8: Lambda Expression
- Java 8 Lambda Expression 学习
- Lambda Expression in Java 8
- Java Tutorials Lambda expressions,Java Lambda表达式
- Java Lambda表达式入门
- Java 8 lambda表达式
- Java Lambda表达式入门
- java之Lambda表达式
- Java Lambda表达式例子
- Java Lambda表达式入门
- Java- Lambda表达式
- Java Lambda表达式入门
- Java Lambda表达式入门
- Java lambda表达式初探
- JAVA Lambda表达式教程
- 使用Android Studio进行单元测试
- phpStrom&webStorm证书码
- Cygwin安装与使用
- SGU - 366 Computer Game(dp)
- 判断手机网络状况
- Java Lambda表达式(Java Lambda Expression)
- map遍历方法
- 面向对象思想概述
- JDK, JRE和JVM的区别与联系
- Asset目录与res目录的区别
- JQuery实现Ajax
- JSTree使用指南
- Deep Learning(深度学习)学习笔记整理系列之(一)
- 应用程序无法正常启动0xc0150002 解决方案