jdk8新特性lambda表达式
lambda是java8新出的一个特性,现在很多面向对象的语言其实是即支持面向对象有支持面向过程编程的,
但是java只支持面向对象编程,所以java8就出了lambda表达式,他可以将函数作为参数进行传递,当然以
前版本的jdk也可以实现类似的功能,但是以前要实现的话需要用反射,反射用起来比较麻烦,有通过类的
反射去找到方法的反射,然后调用的是有又要进行异常处理,而且当一个参数是需要多种结构的方法
时,java就得写很多类来封装这些方法,但是使用lambda表达式后这些问题都了可以解决了。
下面直接和大家进行代码演示:
首先还是需要准备一个接口
@FunctionalInterface //此注解没有实际含义,他只是限制次接口中有且只能有一个方法
public interface A<T>{
void run(T t) ;
}
写lambda表达式
public class B{
public static void main(String[] args){
// 1.自己写方法
A<String> fun = a -> System.out.println(a) ; //如果有多条语句可以使用大括号{}
fun.run(“小王同学”) ;
// 2.保存系统自带的方法
A<Object> fun1 = System.out::pringln ; //System.out表示一个对象 ::后面的是对象中的方法
fun1.run("小王同学") ;
}
}
系统提供的部分接口讲解
public class B{
public static void main(String[] args){
//1.Consumer 表示一个参数没有返回类型的方法
Consumer<String> fun1 = a -> System.out.println(a) ;
fun1.accept("小王同学") ;
//2.Supplier 表示没有参数但是有返回类型的
Supplier<String> fun2 = () -> "小王同学" ;
String str = fun2.get() ;
System.out.println(str) ;
//3.Function 表示一个参数并且有返回值
Function<String , String> fun3 = a -> a ;
System.out.println(fun3.apply("小王同学")) ;
//4.Predicate 一个参数返回布尔类型
Predicate<String> fun4 = a -> "小王同学".equals(a) ;
fun4.test("小王同学") ; //返回true
//....当然jdk还提供了很多接口,大部分都在java,util,function包中,有兴趣的可以自己去了解一下
}
}
//遍历集合
List<String> list = Arrays.asList("a" , "b" , "c" , "d") ;
list.forEach(a - > {
System.out.println(a) ;
}) ;
希望对大家有所帮助