今天简单的学习了Rambda表达式,总结了rambda表达式的几种写法,可能不太正确,有错的地方还请各位大佬告诉我,我会努力改正的
public class Test1 {
/*对于Ramdba表达式
* Java8有一个短期目标和一个长期目标。
* 短期目标是:配合“集合类批处理操作”的内部迭代和并行处理
*
* 长期目标是将Java向函数式编程语言这个方向引导
* (并不是要完全变成一门函数式编程语言,
* 只是让它有更多的函数式编程语言的特性),
* 也正是由于这个原因,Oracle并没有简单地使用内部类去实现λ表达式,
* 而是使用了一种更动态、更灵活、易于将来扩展和改变的策略
* (invokedynamic)。(这段内容是来自另一位博主的文章内的,觉得挺好就放在这里可)
*
*JDk预定了很多函数接口已避免用户重复定义 最典型的就是Function了:
*
* @FunctionalInterface()
* public interface Function<T,R>{
* R apply(T t);
* }接收一个T类型 返回一个R类型
*
* 另一个预定的接口叫做Consumer 跟Function的唯一不同的是他没有返回值
* @FunctionalInterface();
* public interface Consumer(){
* void accept(T t);
* }接收一个T类型的数组 没有返回值
*
* 还有一个预定的函数接口Predicate用来判断是否满足条件
* @FunctionalInterface
* public interface Perdicate<T>{
* boolean test(T t);
* }接收T类型返回boolean类型
*
*
*/
public static void main(String[] args) {
//写法一
//对于函数式接口 中没有传入参数 无需返回值的 方法 rambda表达式可以这样写
//()->{System.out.println("Rambda表达式")}
//例如Runnable接口中的run方法
Runnable r1 =(Runnable)()->{
System.out.println("Ranbda 表达式");
};
r1.run();
//其实上面的代码可以简写为
Runnable r =()->{
System.out.println("Ranbda 表达式");
};
//因为java编译器会根据上下文推断
//这个无参且没有返回值的rambda表达式刚好可以对应Runnable中的run方法
System.out.println("===========================");
//写法二
//对于函数式接口中 有传入参数 无返回值类型的方法 写法如下
Consumer<String> con =element->{ //element 为传入的参数 无需声明
System.out.println("有传入参数无返回值类型的方法 参数为:"+element);
};
//调用con中的accept方法
con.accept("abc");//因为泛型中定义的为String类型,所以只能传入String类型
System.out.println("===========================");
//对于函数式接口中 有传入参数 并且有返回值类型的方法 写法如下
Function<String,String> fun =element->{//element为传入参数
return "有参数且有返回值类型的方法 传入参数为:"+element;
};
String returnedValue =fun.apply("abc");
System.out.println(returnedValue);
System.out.println("===========================");
}
}