Java8开始支持函数式编程、包括lambda表达式、Stream流。
函数式编程用于简化开发,对于某些类,或许只使用一次,那么就没必要对其进行单独的实现一个类,java原本提供了简化的方案,如内部类、匿名内部类等。
lambda对此更加简化。
函数式接口就是只有一个方法的接口,想想函数是不是一个个是独立的。
Runnable接口就是一个函数式接口,如下:
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
//@FunctionalInterface注解代表这是一个函数式接口,但不是必须的,加上注解jvm会帮助检查。
// public abstract void run();中的abstract也可以省略,接口中的方法本就是抽象方法
使用了函数式接口后,就不需要实现类,直接使用lambda即可。
lambda用于替代实现类,形式如下:
FunctionalInterface func=()->{
......
};
@FunctionalInterface
interface Func{
void hello();
}
public class LambdaDemo {
public static void main(String[] args) {
Func func=()->{
System.out.println("hello");//lambda表达式
};
func.hello();//调用方法
}
}
直接在抽象方法前加上返回类型,在lambda中有返回值即可。
public class LambdaDemo {
public static void main(String[] args) {
Func func=()->{
System.out.println("hello");
return "ok lambda";
};
String s = func.hello();
System.out.println(s);
}
}
@FunctionalInterface
interface Func{
String hello();
}
参数声明在抽象方法中,在lambda中加上类型即可:
public class LambdaDemo {
public static void main(String[] args) {
Func func=(int a,String c)->{
System.out.println("hello"+a+c);
return "ok lambda";
};
String s = func.hello(8,"yes");
System.out.println(s);
}
}
lambda中的数据类型可以略去
Func func=( a,c)->{
System.out.println("hello"+a+c);
return "ok lambda";
};
如果只有一个参数的话,连()都可以省略。
public class LambdaDemo {
public static void main(String[] args) {
Func func=c->{ //lambda省去()
System.out.println("hello "+c);
return "ok lambda";
};
String s = func.hello("yes");
System.out.println(s);
}
}
@FunctionalInterface
interface Func{
String hello(String b);
}
原文:https://www.cnblogs.com/cgl-dong/p/12157688.html