JDK1.8 Lambda 表示式的學習
1、Lambda 表示式
Lambda 表示式(也稱為閉包)是整個Java8發行版本中最受期待的在Java語言層面上的改變,Lambda 允許把函式作為一個方法的引數(函式作為引數傳遞進方法中),或者把程式碼看成資料,Lambda 表示式用於簡化Java中介面式的匿名內部類,被稱為函式式介面的概念,函式式介面就是一個具有一個方法的普通介面,像這樣的介面,可以被隱式轉換為Lambda 表示式。
語法:
(引數1,引數2...)->(...)
(1)沒有引數的時候使用Lambda 表示式
(2)帶引數時使用Lambda 表示式
(3)程式碼塊中只一句程式碼時使用Lambda 表示式
(4)程式碼塊中有多句程式碼時使用Lambda 表示式
(5)有返回值的程式碼塊
(6)引數中使用final 關鍵字
/**
* @Date: 2018/12/8 10:23
* @Description:
*/
public class LambdaDemo {
// public static void main(String args[]) {
// IEat iEat = new IEatImpl();
// iEat.eat();
//
// //匿名內部類的使用
// IEat iEat1 = new IEat() {
// public void eat() {
// System.out.println("eat banana");
// }
// };
// iEat1.eat();
//
// //Lambda 表示式
// //好處:1.程式碼更加的簡介;2.不會單獨生成class檔案
// //一個介面中只有一個方法的時候能使用Lambda 表示式
// //如果一個介面有多個方法就不能使用Lambda 表示式,只能用傳統的匿名內部類
// //IEat iEat2 = () ->{ System.out.println("eat peach");};
//
// //沒有引數時候的使用
// IEat iEat2 = () -> System.out.println("eat peach");
// iEat2.eat();
// }
public static void main(String args[]) {
//1.帶引數時使用,引數的型別可以省略
// IEat iEat = (thing,name) -> System.out.printf("eat:", thing + "...." + name);
// iEat.eat("apple","anf");
//2.帶引數時使用,引數的型別可以省略,程式碼中有多行引數
// IEat iEat = (thing,name) -> {
// System.out.printf("eat:", thing);
// System.out.println(name);
// };
// iEat.eat("apple","anf");
//3.帶返回值的方法
// IEat iEat = (thing , name) ->{
// System.out.println(name + "eat" + thing);
// int i = 10;
// return i;
// };
// iEat.eat();
//4.帶返回值的方法中只有一句實現程式碼
// IEat iEat = (thing , name) -> thing == null?1:0;
// iEat.eat();
//5.引數中使用final 關鍵字
// IEat iEat = (final String thing ,final String name) -> thing == null?1:0;
// iEat.eat();
}
}
//只有一個抽象方法的介面
interface IEat{
public void eat();
public void eat(final String thing,final String name);
}
//實現類
class IEatImpl implements IEat{
public void eat() {
System.out.println("eat apple");
}
@Override
public void eat(String thing,String name) {
System.out.println("string thing");
}
}
2.介面中的預設方法和靜態方法
interface A{
public default void print(){};
public static void method(){};
}
預設方法與靜態方法並不影響函式式介面的契約,可以任意使用。
package demo;
import lombok.Data;
/**
* @Date: 2018/12/8 11:14
* @Description:
*/
@Data
public class Student {
private String name;
private Integer age;
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
import demo.Student;
import java.util.Arrays;
import java.util.Comparator;
/**
* @Date: 2018/12/8 10:23
* @Description:
*/
public class LambdaDemo {
public static void main(String args[]) {
//排序
//Comparator<Student> comparator = (o1,o2) ->o1.getAge() - o2.getAge();
Arrays.sort(students,(o1,o2) ->o1.getAge() - o2.getAge());
System.out.println(Arrays.toString(students));
}
}
//只有一個抽象方法的介面
interface IEat{
public void eat();
public void eat(final String thing,final String name);
//預設方法, 預設方法與靜態方法並不影響函式式介面的契約,可以任意使用。
public default void print(){
System.out.println("print test");
}
//靜態方法 ,預設方法與靜態方法並不影響函式式介面的契約,可以任意使用。
public static void method(){
System.out.println("static method");
}
}
//實現類
class IEatImpl implements IEat{
public void eat() {
System.out.println("eat apple");
}
@Override
public void eat(String thing,String name) {
System.out.println("string thing");
}
}
相關文章
- [Java學習筆記]JDK1.8新特性學習(一)Lambda表示式Java筆記JDK
- JDK1.8 之Lambda表示式JDK
- JDK1.8之lambda表示式JDK
- JDK1.8及以上的Lambda表示式JDK
- jdk1.8 lambda表示式入門JDK
- JDK1.8新特性--Lambda表示式JDK
- jdk1.8新特性:Lambda表示式JDK
- JDK1.8的新特性之Lambda表示式JDK
- JDK1.8中Lambda表示式的應用JDK
- JDK1.8新特性之Lambda表示式JDK
- JDK1.8新特性之Lambda表示式()->JDK
- 最近學習到的Lambda表示式
- JDK1.8之Lambda解析與表示式的使用JDK
- Python學習筆記 - lambda表示式Python筆記
- jdk1.8 新特性之 如何寫lambda表示式JDK
- java8學習:lambda表示式(2)Java
- java8學習:lambda表示式(1)Java
- 工作學習筆記(十一)Lambda 表示式筆記
- JDK1.8新特性:Lambda表示式語法和內建函式式介面JDK函式
- lambda 表示式
- lambda表示式
- Java的Lambda表示式Java
- cpp的lambda表示式
- C# Lambda表示式詳解,及Lambda表示式樹的建立C#
- Python學習(13)--Lambda表示式和switch語句的實現Python
- Java | Lambda表示式Java
- 【Kotlin】Lambda表示式Kotlin
- CPP lambda表示式
- 八,Lambda表示式
- Python Lambda 表示式Python
- Lambda表示式(Java)Java
- Java Lambda表示式Java
- Python - lambda 表示式Python
- kotlin lambda表示式Kotlin
- lambda 表示式使用的方式
- Java 中的 Lambda 表示式Java
- Lambda 表示式的應用
- 禿頭星人進化記(Lambda表示式學習總結)