① 用java 8里面的lambda表达式写一个简单加法运算
/*
一个接口,如果只有一个显式声明的抽象方法,
那么它就是一个函数接口。
一般用@FunctionalInterface标注出来(也可以不标)
*/
public interface Inteface1{
//可以不用abstract修饰
public abstract void test(int x,int y);
//public void test1();//会报错,不能有两个方法,尽管没有使用abstract修饰
public boolean equals(Object o);//equals属于Object的方法,所以不会报错
}
public class Test{
public static void main(String args[]){
Inteface1 f1=(int x,int y)->{System.out.println(x+y);};
f1.test(3,4);
Inteface1 f2=(int x,int y)->{ System.out.println("Hello Lambda!\t the result is " +(x+y));};
f2.test(3,4);
}
}
② java8 lambda 表达式是个什么
为了支持函数式编程,Java 8引入了Lambda表达式.
在Java 8中采用的是内部类来实现Lambda表达式.具体实现代码,可以通过debug看, 同时通过字节码查看工具及反编译工具来验证.
自从lambda表达式成为Java语言的一部分之后,Java集合(Collections)API就面临着大幅变化。而JSR 355(规定了Java lambda表达式的标准)的正式启用更是使得Java集合API变的过时不堪。
尽管我们可以从头实现一个新的集合框架(比如“Collection II”),但取代现有的集合框架是一项非常艰难的工作,因为集合接口渗透了Java生态系统的每个角落,将它们一一换成新类库需要相当长的时间。因此,我们决定采取演化的策略(而非推倒重来)以改进集合API: 为现有的接口(例如Collection,List和Stream)增加扩展方法;
在类库中增加新的流(stream,即java.util.stream.Stream)抽象以便进行聚集(aggregation)操作;
改造现有的类型使之可以提供流视图(stream view);
改造现有的类型使之可以容易的使用新的编程模式,这样用户就不必抛弃使用以久的类库,例如ArrayList和HashMap
(当然这并不是说集合API会常驻永存,毕竟集合API在设计之初并没有考虑到lambda表达式。我们可能会在未来的JDK中添加一个更现代的集合类库)。
除了上面的改进,还有一项重要工作就是提供更加易用的并行(Parallelism)库。尽管Java平台已经对并行和并发提供了强有力的支持,然而开发者在实际工作(将串行代码并行化)中仍然会碰到很多问题。因此,我们希望Java类库能够既便于编写串行代码也便于编写并行代码,因此我们把编程的重点从具体执行细节(how computation should be formed)转移到抽象执行步骤(what computation should be perfomed)。
③ 消灭冗长代码,掌握 Java 8 Lambda 表达式
Java 8引入的Lambda表达式是一种强大的匿名函数,它将方法参数、表达式和代码块集成到一个可传递的函数体中,简化了代码结构,支持函数式编程。Lambda的起源可以追溯到数学家丘奇,但直到Java 8,它才真正融入Java,减少了冗长的样板代码,提升了代码的可读性和维护性。
使用Lambda,代码变得更简洁,比如,与内部类相比,Lambda表达式更紧凑,减少了编写和维护的代码量。它支持函数式编程的核心特性,如高阶函数和闭包,可以作为参数传递或从函数返回。例如,高阶函数如filter和map,使得集合操作更为便捷。
Java 8内置的函数式接口如Consumer、Supplier、Function和Predicate,帮助我们更好地应用Lambda。自定义函数式接口也支持Lambda,进一步扩展了其灵活性。在集合操作中,Lambda表现得尤为突出,如遍历、过滤、排序,甚至与Stream API结合,提供了强大的数据处理能力。
尽管Lambda简化了并发编程,如创建线程和异步操作,但仍有一些局限,例如仅适用于单方法接口,且复杂控制流程可能需要传统代码。使用时需要注意过度使用可能导致代码可读性下降,性能开销以及变量捕获的影响。
总的来说,Lambda是Java 8的一大进步,它简化了编程,但同时也需要开发者在实际应用中权衡其优缺点,随着Java的演进,Lambda将继续推动函数式编程在Java中的应用和发展。