Java使用lamda表達式簡化代碼

代碼,自然寫的越簡潔越好啦,寫的人舒服,看的人也舒服,一切為了高效 。
要把有限的時間花到其它有意思的事情上去 。
目的學習簡化代碼的思路,使用jdk8新特性lamada表達式 。
使用某接口,只有一個方法 。
比如這個:
package java.lang;@FunctionalInterfacepublic interface Runnable {void run();}或者是這個:
interface MyInterface{void sayHi();}實現接口 , 使用方法一般我們要使用Runable子類開啟一個線程,要實現Runnable接口,調用Threead類的start方法:
public class LeaningLamda implements Runnable{public static void main(String[] args) {new Thread(new LeaningLamda()).start();}@Overridepublic void run() {System.out.println(this.getClass()+"我已經在跑了!");}}或者用sayHi方法干點什么 , 要先實現接口,再調用:
public class LeaningLamda2 implements MyInterface{public static void main(String[] args) {new LeaningLamda2().sayHi();}@Overridepublic void sayHi() {System.out.println("ok ok ok ok ,i am say Hi!");}}interface MyInterface{void sayHi();}內部類實現接口 , 使用方法如果這個方法我就用一次,那我可以在內部類中實現它,提高程序性能:
public class LeaningLamda{static class MyRun implements Runnable{@Overridepublic void run() {System.out.println(this.getClass()+"我已經在跑了!");}}public static void main(String[] args) {new Thread(new MyRun()).start();}}一樣的用sayHi方法:
public class LeaningLamda2 {static class MyHi implements MyInterface{@Overridepublic void sayHi() {System.out.println("ok ok ok ok ,i am say Hi!");}}public static void main(String[] args) {new MyHi().sayHi();}}interface MyInterface{void sayHi();}局部內部類實現接口 , 使用方法既然只使用一次,那我為啥不把它放在使用的方法里面去,性能不就又UpUpUpUp 。
像這樣:
public class LeaningLamda{public static void main(String[] args) {class MyRun implements Runnable{@Overridepublic void run() {System.out.println(this.getClass()+"我已經在跑了!");}}//調用在定義后面,謝謝 。new Thread(new MyRun()).start();}}或是這樣:
public class LeaningLamda2 {public static void main(String[] args) {class MyHi implements MyInterface{@Overridepublic void sayHi() {System.out.println("ok ok ok ok ,i am say Hi!");}}new MyHi().sayHi();}}interface MyInterface{void sayHi();}匿名內部類實現接口,使用方法我就用一次,要什么名字?。磕萇偈淙胍桓鱟址際親?。需要借助父類或者接口名來實現 。
你看:
public class LeaningLamda{public static void main(String[] args) {//需要借助父類或者接口來聲明new Thread(new Runnable(){@Overridepublic void run() {System.out.println(this.getClass()+"我已經在跑了!");}}).start();}}又如:
public class LeaningLamda2 {public static void main(String[] args) {new MyInterface(){@Overridepublic void sayHi() {System.out.println("ok ok ok ok ,i am say Hi!");}}.sayHi();}}interface MyInterface{void sayHi();}使用lamda表達式的,實現方法jdk 8 看不下去了,給我們提供了一個更加簡化的方案,你看:
lamda表達式實現創建單個簡單線程:
public class LeaningLamda{public static void main(String[] args) {new Thread(()-> {System.out.println("我已經在跑了!");}).start();}}lamda表達式sayHi:
public class LeaningLamda2 {public static void main(String[] args) {//此處需要借助一個父類或接口對象來存放,調用它MyInterface ls = ()->{System.out.println("ok ok ok ok ,i am say Hi!"); };ls.sayHi();}}interface MyInterface{void sayHi();}可帶參數lamda表達式可以帶參數,可以不指定類型,它會自適應類型:
public class LeaningLamda2 {public static void main(String[] args) {MyInterface ls = (i,str)->{System.out.println("int:"+i);System.out.println("String:"+str);};ls.sayHi(520,"i love you!");}}interface MyInterface{void sayHi(int i,String str);}運行結果:

Java使用lamda表達式簡化代碼

文章插圖
一個參數那我括號都可以省了!
public class LeaningLamda2 {public static void main(String[] args) {MyInterface ls = str-> System.out.println("String:"+str);ls.sayHi("i love you!");}}interface MyInterface{void sayHi(String str);}運行結果:
Java使用lamda表達式簡化代碼

文章插圖
返回值如果有返回值呢,正常返回:
public class LeaningLamda2 {public static void main(String[] args) {MyInterface ls = (String str)-> {String str2 = "最后的贏家是:"+str;return str2;};System.out.println(ls.sayHi("lurenjia"));}}interface MyInterface{String sayHi(String str);}一條語句如果方法只有一條語句 , 那大括號也沒有必要 , 可以省略:

推薦閱讀