有关于lambda所解决的问题
lambda表达式的话,你可以看如果你想实现一个接口的话有几种方式:
第一种中使用java编写类去实现。
第二种使用匿名内部类
但发现还是有点复杂,由于借鉴于python等语言的特性,于是jdk8中加入了lambda表达式。
lambda如何使用
PojoService pojoService = () -> {
System.out.println("adfasdf");
};
public interface PojoService {
void show();
default void show2(){
System.out.println("adfsf");
};
}
由上图可知PojoService是一个接口,其中只有一个方法并且没有被实现。jdk8后面加入了default,在接口使用default的意思说明该方法被实现,不是未实现的方法,并且你需要编写方法体。
对于java1.8中它仅仅支持接口只有一个未实现的方法进行lambda表达式使用,java1.8本身也有些类可以使用lambda表达式这些类都被使用了@FunctionalInterface表明他是一个函数式接口。
()->{} ()表示的式为实现的方法,你可以对其进行传参
->{} 表示你对该方法的实现。
@FunctionalInterface
public interface PojoService02 {
public void test(String name,int age);
}
PojoService02 pojoService02=(a,b)->{
System.out.println("hello world!!");
};
对于lambda简化行式,如果你只一个参数的话可以直接写成一下的方式,
即将()进行省略,当然如果你的方法体中只有一个语句的话可以将{}进行省略
当然如果你的方法体中只有返回体的话,你可以不用编写 return a;而是直接使用a。
public interface PojoService03 {
public void show(int a);
}
PojoService03 pojoService03= a->{
System.out.println("hellow world!!");
};
有关于lambda方法引用,lambda方法引用需要满足一下两个条件你引用的方法必须要和你实现接口的返回值和参数类型一样
package com.chuan.se;
import com.chuan.se.service.PojoService;
import com.chuan.se.service.PojoService02;
import com.chuan.se.service.PojoService03;
import com.chuan.se.service.PojoService04;
/**
* * 什么是lambds?为什么要使用lambda,在使用lambda,在使用lambdad对接口要求?
* lambda就是匿名表达式!!!
*/
public class MyLambda {
public int myLambda2(int a){
System.out.println(a);
return a;
}
public static int myLambda(int a){
System.out.println(a);
return 1;
};
public static void main(String[] args) {
PojoService pojoService = () -> {
System.out.println("adfasdf");
};
pojoService.show2();
pojoService.show();
}
/*
如果需要省略类型,则所有的参数类型都得省略,你要省略则都省略
*/
PojoService02 pojoService02=(a,b)->{
System.out.println("hello world!!");
};
PojoService02 pojoService04= (a,b)->{
System.out.println("hello world!!");
};
PojoService03 pojoService03= a->{
System.out.println("hellow world!!");
};
/**
* 大括号省略,如果方法体类只有一条语句,则大括号可以省略
*/
PojoService03 pojoService05= a->
System.out.println("hellow world!!");
/**
* 大括号省略扩展,如果只有一个返回值语句的时候,可以省略大括号
*/
PojoService04 pojoService06=a->1;
/*
lambda语法进阶
//方法引用
记住方法引用,
为达到理想我将付出我的一切。。。。不服
*/
/**
* 这个是引用的是静态方法
*/
PojoService04 pojoService07=MyLambda::myLambda;
/*
*/
PojoService04 pojoService08=a->myLambda(a);
/*
引用成员方法
*/
PojoService04 pojoService09=a->myLambda2(a);
PojoService04 pojoService10=new MyLambda()::myLambda2;
/*
闭包可以提供局部变量的生命周期
*/
}