本篇文章為大家帶來了關於java的相關知識,其中主要介紹了關於lambda表達式的相關問題,Lambda表達式是JDK8開始後的一種新語法形式,能夠簡化匿名內部類別的程式碼寫法,下面一起來看一下,希望對大家有幫助。
推薦學習:《java影片教學》
Lambda表達式是JDK8開始後的一種新語法形式
作用:簡化匿名內部類別的程式碼寫法
格式:
(匿名内部类被重写方法的形参列表)->{ 被重写方法的方法体代码 } 注:->是语法形式,无实际意义
首先我們先定義一個抽象類,透過匿名內部類別重寫其方法,再簡化,比較二者之間有何變化:
使用Lambda表達式之前:
public static void main (String[] args){ People p = new People(){ @Override public void run(){ System.out.println("小学生跑的很慢"); } }; p.run(); } abstract class People{ public abstract void run(); }
使用Lambda表達式之後:
People p = ()->{ System.out.println("小学生跑的很慢"); }; //会出现报错
會出現報錯,這是為什麼呢?原因在於前面對於Lambda表達式的定義並不清晰,Lambda表達式並不能簡化所有匿名內部類,其只能簡化函數式接口匿名內部類的寫法形式,且接口中有且僅有一個抽象方法,通常,我們會再在介面上加上一個@Functionalinterface註解,標記該介面必須是滿足函數式介面。
真正意義上透過Lambda表達式簡化:
@FunctionalInterface//加上这个注解必须是函数式接口,且只有一个抽象方法 interface People{ void run(); } //简化之前的匿名内部类 People p = new People(){ @Override public void run(){ System.out.println("小学生跑的很慢!"); } }; //简化之后 People p = () -> { System.out.println("小学生跑的很慢!"); };
另外,也可以將其作為參數代入方法中去使用:
//在原来的基础上定义一个pk方法 public static void pk(People p){ System.out.println("跑步情况如何:") p.run(); } //不使用Lambda的情况下: pk(p);//需要在定义匿名内部类之后,将p代入; //使用Lambda的情况: People p = () -> { System.out.println("小学生跑的很慢!"); }; pk(() -> { System.out.println("小学生跑的很慢!"); }); //由于等号右边即是People创建的对象p,因此可以可以直接将其代入
Lambda的好處:
Lambda是匿名函數,我們可以把Lambda表達式理解為是一段可以傳遞的程式碼,它可以寫出更簡潔、更靈活的程式碼,作為更緊湊的程式碼風格,使Java語言表達能力得到了提升。
在先前的學習過程中,我們學習過了Arrays的相關知識,其中有一個sort方法(可以將陣列升序或降序排列),它其實也是介面類,只有一個抽象方法:
//精简之前: Arrays.sort(grade,new Comparator<Integer>(){ @Override public int compare(Integer o1,Integer o2){ return o2 -o1; } }); //精简之后: Arrays.sort(grade,(Integer o1,Integer o2) -> { return o2 -o1; });
//参考前面的实战例子 Arrays.sort(grade,(Integer o1,Integer o2) -> { return o2 -o1; }); //省略参数类型之后 Arrays.sort(grade,( o1, o2){ return o2 -o1; });
//简单引用一个单个参数的例子,不需要了解其具体含义 btn.addActionListener((ActionEvent e) -> { System.out.println("我是简单的例子。"); }); //简化之后: btn.addActionListener( e -> { System.out.println("我是简单的例子。"); });
//参照上一条规则的例子 btn.addActionListener( e -> { System.out.println("我是简单的例子。"); }); //简化之后: btn.addActionListener( e -> System.out.println("我是简单的例子。") );
//参照第一条规则的代码 Arrays.sort(grade,(Integer o1,Integer o2) -> { return o2 -o1; }); //简化之后: Arrays.sort(grade,( o1, o2)-> o2 -o1);推薦學習:《
java影片教學》
以上是怎麼理解Java中的lambda表達式的詳細內容。更多資訊請關注PHP中文網其他相關文章!