java Lambda表达式
Posted 一场屠夫的战争
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Lambda表达式相关的知识,希望对你有一定的参考价值。
Lambda表达式
1.Java 8(Java 1.8)提供的新语法
2.相当于一个简化版的匿名内部类,有人也称为匿名方法
3.Java集合提供了Lambda表达式功能.
4.Lambda是功能性接口的简单实现
/*
* Lambda表达式演示:
*/
public class LambdaDemo01 {
public static void main(String[] args) {
//利用匿名内部类"快捷"实现接口
Foo foo=new Foo(){
public double test(int a,double b){
return a+b;
}
};
System.out.println(foo.test(4, 5)); //9.0
//使用Lambda表达式实现功能接口
Foo foo1=(int a,double b)->{return a+b;};
//当语句块只有一行时候,可以省略{}
Foo foo2=(a,b)->a+b;
//测试
System.out.println(foo1.test(5, 6.7)); //11.7
System.out.println(foo1.test(5, 6.7)); //11.7
//在Lambda表达式中使用多行语句
Foo foo3=(a,b)->{a++;b++;return a+b;};
System.out.println(foo.test(5,6.7)); //11.7
//使用Lambda实现Goo接口
Goo goo=b->System.out.println(b); //5.5
//调用
goo.test(5.5);
//当方法参数是一个接口类型时候,Lambda可以作为方法参数使用
Goo goo1=b->System.out.println(b); //5.5
demo(goo1);
demo(b->System.out.println(b));//简洁 5.5
//匿名内部类
demo(new Goo(){
public void test(double b) {
System.out.println(b); //5.5
}
});
}
public static void demo(Goo goo){
goo.test(5.5);
}
}
/*
* 功能性接口:只有一个方法的接口
*/
interface Foo{
double test(int a,double b);
}
interface Goo{
void test(double b);
}
利用Lambda表达式实现Java API中的功能接口:
public class LambdaDemo02 {
public static void main(String[] args) {
Runnable r=()->{System.out.println("hello world");};
Thread t=new Thread(r);
t.start();
//最简洁写法
Thread t1=new Thread(()->System.out.println("hello world!"));
t1.start();
//利用Lambda实现FileFilter接口
File dir=new File("D:/");
//利用file tilter列文件夹恩荣
File [] files=dir.listFiles(file->file.getName().endsWith(".conf"));
for(File f:files){
System.out.println(f);
}
}
}
/*
interface Runnable{
void run();
}*/
功能性接口
只有一个方法的接口,称为功能性接口
public class LambdaDemo03 { public static void main(String[] args) { } } /* * Functional功能性 Interface接口 * Java 8 提供了注解,用于约束接口必须为功能性接口,即只能有一个方法 * 这是一个可选注解,可以不用! */ @FunctionalInterface interface koo{ void test(); }
Java 8在集合上提供了Lambda表达式遍历.也称为函数式遍历:
public static void main(String[] args) {
List<String> list=new ArrayList<>();
list.add("Tom");
list.add("Jerry");
list.add("熊大");
list.add("熊二");
//Java 8 提供了forEach
list.forEach((name)->System.out.println(name));
}
/**
* Lambda与匿名内部类,最大的区别是this用法不同:
* 1.在匿名内部类中this 代表当前匿名内部类的实例
* 2.在lambda中this代表外部类的实例
*/
public class LambdaDemo05 {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
class Demo{
int n=5;
public void hello(){
//匿名内部类 :this代表当前匿名内部类实例
//Demo.this 代表外部类的实例,一般时候可以省略 this 引用 Demo.this
Too t1=new Too(){
int b=6;
public void test(int a) {
System.out.println(a+this.b+Demo.this.n);
}
};
t1.test(8);
//lambda中的this是外部类对象的引用 就是Demo.this
Too t2=(a)->{System.out.println(a+this.n);};
t2.test(5);
}
}
interface Too{
void test(int a);
}
以上是关于java Lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章