欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中Lambda表達式的使用詳解

 更新時間:2021年09月30日 15:23:09   作者:四季人06  
Lambda 表達式,也可稱為閉包,它是推動 Java 8 發(fā)布的最重要新特性。Lambda 允許把函數作為一個方法的參數(函數作為參數傳遞進方法中)。使用 Lambda 表達式可以使代碼變的更加簡潔緊湊

理解函數式接口以及 Lambda表達式的發(fā)展過程

任何接口,只包含唯一一個抽象方法,就是函數式接口

/**
 * lambdab表達式的發(fā)展
 */
public class TestLambda1 {
    //3.靜態(tài)內部類
    static class Like2 implements ILike{
        @Override
        public void lambda() {
            System.out.println("i like lambda2");
        }
    }

    public static void main(String[] args) {
        ILike like=new Like();
        like.lambda();

        like=new Like2();
        like.lambda();

        //4.局部內部類
       class Like3 implements ILike{
            @Override
            public void lambda() {
                System.out.println("i like lambda3");
            }
        }
        like=new Like3();
        like.lambda();

        //5.匿名內部類
        like=new ILike() {
            @Override
            public void lambda() {
                System.out.println("i like lambda4");
            }
        };
        like.lambda();

        //6.用lambda簡化
        like=()->{
            System.out.println("i like lambda5");
        };
        like.lambda();
    }
}

//1.定義一個函數式接口
interface ILike{
    void lambda();
}

//2.實現(xiàn)類
class Like implements ILike{

    @Override
    public void lambda() {
        System.out.println("i like lambda");
    }
}

Lambda表達式及語法

Lambda 允許把函數作為一個方法的參數(函數作為參數傳遞進方法中)

// 1. 不需要參數,返回值為 5  
() -> 5  
  
// 2. 接收一個參數(數字類型),返回其2倍的值  
x -> 2 * x  
  
// 3. 接受2個參數(數字),并返回他們的差值  
(x, y) -> x – y  
  
// 4. 接收2個int型整數,返回他們的和  
(int x, int y) -> x + y  
  
// 5. 接受一個 string 對象,并在控制臺打印,不返回任何值(看起來像是返回void)  
(String s) -> System.out.print(s)

也就是說,不需要事先聲明參數的類型,圓括號可以沒有,大括號可以沒有,返回值可以沒有

一起來看看具體的使用

public class java8_Lambda_Test {
    public static final void main(String[] args) {

        Operator addOper = (a, b) -> a + b;
        Operator reduceOper = (a, b) -> a - b;
        Operator multiplyOper = (a, b) -> a * b;
        Operator DivideOper = (a, b) -> a / b;

        java8_Lambda_Test test = new java8_Lambda_Test();
        System.out.println(test.getResult(3, 3, addOper));//6
        System.out.println(test.getResult(3, 3, reduceOper));//0
        System.out.println(test.getResult(3, 3, multiplyOper));//9
        System.out.println(test.getResult(3, 3, DivideOper));//1
    }

    public int getResult(int a, int b, Operator operator) {
        return operator.convert(a, b);
    }

    public interface Operator {
        int convert(int a, int b);
        default int get(int a) {
            return a;
        }
    }
}

你需要注意什么

1.lambda 表達式只能引用標記了 final 的外層局部變量
2.可以直接在 lambda 表達式中訪問外層的局部變量

Lambda的實際運用

1.對集合排序

問題描述:在一個存放了Student對象的list中,按年齡進行排序,輸出排序后的list

Student類

public class Student implements Comparable<Student>{
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int compareTo(Student student2) {
       int result =this.age - student2.age;
       return result;
    }
}
        List<Student> list=new ArrayList<>();
        Student s1=new Student();
        s1.setName("張三");
        s1.setAge(28);
        list.add(s1);
        Student s=new Student();
        s.setName("李四");
        s.setAge(22);
        list.add(s);
        sortUsingJava8(list);

        list.forEach((student) -> System.out.println(student.getName() + ":"+student.getAge()));
 // 使用 java 8 排序
    static void sortUsingJava8(List<Student> list){
        Collections.sort(list, (student1, student2) -> student1.compareTo(student2));
    }

來康康使用Java7進行排序是這樣的:

    // 使用 java 7 排序
    private void sortUsingJava7(List<String> list){
        Collections.sort(list, new Comparator<String>() {
           @Override
           public int compare(String s1, String s2) {
                return s1.compareTo(s2);
            }
        });
    }

2.遍歷集合

//先準備一個集合
        List<Student> list=new ArrayList<>();
        Student s1=new Student();
        s1.setName("張三");
        s1.setAge(28);
        list.add(s1);
        Student s=new Student();
        s.setName("李四");
        s.setAge(22);
        list.add(s);
//使用 lambda 表達式以及函數操作(functional operation)
  list.forEach((student) -> System.out.println(student.getName() + ":"+student.getAge()));

3.遍歷集合(帶條件)

 //帶條件 打印年齡大于等于20的學生的姓名
        list.forEach((student)->{
            if (student.getAge()>=20)
                System.out.println(student.getName());
                });

4.代替 Runnable,開啟一個線程

Runnable r = new Runnable() {
    @Override
    public void run() {
        //to do something
    }
};
Thread t = new Thread(r);
t.start();

現(xiàn)在這樣寫:

Runnable r = () -> {
    //to do something
};
Thread t = new Thread(r);
t.start();

你還可以這樣寫:

Thread t = new Thread(() -> {
    //to do something
    // such as for
    for(int i = 0; i < 100; i++){
        System.out.println(i);
           }
});
t.start;

到此這篇關于Java中Lambda表達式的使用詳解的文章就介紹到這了,更多相關Java Lambda內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 如何解決Nacos服務下線報錯問題

    如何解決Nacos服務下線報錯問題

    這篇文章主要介紹了如何解決Nacos服務下線報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java 選擇、冒泡排序、折半查找(實例講解)

    Java 選擇、冒泡排序、折半查找(實例講解)

    下面小編就為大家?guī)硪黄狫ava 選擇、冒泡排序、折半查找(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • java數據結構-堆實現(xiàn)優(yōu)先隊列

    java數據結構-堆實現(xiàn)優(yōu)先隊列

    通常都把隊列比喻成排隊買東西,大家都很守秩序,先排隊的人就先買東西。但是優(yōu)先隊列有所不同,它不遵循先進先出的規(guī)則,而是根據隊列中元素的優(yōu)先權,優(yōu)先權最大的先被取出,這篇文章主要介紹了java數據結構-堆實現(xiàn)優(yōu)先隊列,感興趣的朋友一起看看吧
    2021-08-08
  • RxJava的消息發(fā)送和線程切換實現(xiàn)原理

    RxJava的消息發(fā)送和線程切換實現(xiàn)原理

    這篇文章主要介紹了RxJava的消息發(fā)送和線程切換實現(xiàn)原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Spring Boot實現(xiàn)功能的統(tǒng)一詳解

    Spring Boot實現(xiàn)功能的統(tǒng)一詳解

    這篇文章主要介紹了Spring Boot統(tǒng)一功能的處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • 基于Java實現(xiàn)空間濾波完整代碼

    基于Java實現(xiàn)空間濾波完整代碼

    空間濾波是一種采用濾波處理的影像增強方法。其理論基礎是空間卷積和空間相關。這篇文章主要介紹了基于Java的空間濾波代碼實現(xiàn),需要的朋友可以參考下
    2021-08-08
  • Java的this關鍵字的使用與方法的重載相關知識

    Java的this關鍵字的使用與方法的重載相關知識

    這篇文章主要介紹了Java的this關鍵字的使用與方法的重載相關知識,是Java入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • SpringBoot實現(xiàn)跨域的幾種常用方式總結

    SpringBoot實現(xiàn)跨域的幾種常用方式總結

    跨域是指一個域下的文檔或腳本試圖去請求另一個域下的資源,或者涉及到兩個不同域名的資源之間的交互,由于同源策略(Same Origin Policy)的限制,瀏覽器不允許跨域請求,本文小編給大家分享了SpringBoot實現(xiàn)跨域的幾種常用方式,需要的朋友可以參考下
    2023-09-09
  • Mybatis批量插入index out of range錯誤的解決(較偏的錯誤)

    Mybatis批量插入index out of range錯誤的解決(較偏的錯誤)

    這篇文章主要介紹了Mybatis批量插入index out of range錯誤的解決(較偏的錯誤),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java 將Excel轉為SVG的方法

    Java 將Excel轉為SVG的方法

    本文以Java示例展示如何將Excel文檔轉為SVG格式。通過本文中的方法,在將Excel轉為SVG時,如果sheet工作表中手動設置了分頁,則將每個分頁的內容單獨保存為一個svg文件,如果sheet工作表中沒有設置分頁,則將Excel sheet表格中默認的分頁范圍保存為svg。
    2021-05-05

最新評論