溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用Java中Lambda表達(dá)式

發(fā)布時(shí)間:2021-09-30 17:03:10 來源:億速云 閱讀:121 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“如何使用Java中Lambda表達(dá)式”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

目錄
  • 理解函數(shù)式接口以及 Lambda表達(dá)式的發(fā)展過程

  • Lambda表達(dá)式及語法

  • 一起來看看具體的使用

  • 你需要注意什么

  • Lambda的實(shí)際運(yùn)用

    • 1.對(duì)集合排序

    • 2.遍歷集合

    • 3.遍歷集合(帶條件)

    • 4.代替 Runnable,開啟一個(gè)線程

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

任何接口,只包含唯一一個(gè)抽象方法,就是函數(shù)式接口

/**
 * lambdab表達(dá)式的發(fā)展
 */
public class TestLambda1 {
    //3.靜態(tài)內(nè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.局部?jī)?nèi)部類
       class Like3 implements ILike{
            @Override
            public void lambda() {
                System.out.println("i like lambda3");
            }
        }
        like=new Like3();
        like.lambda();

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

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

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

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

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

Lambda表達(dá)式及語法

Lambda 允許把函數(shù)作為一個(gè)方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中)

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

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

一起來看看具體的使用

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 表達(dá)式只能引用標(biāo)記了 final 的外層局部變量
2.可以直接在 lambda 表達(dá)式中訪問外層的局部變量

Lambda的實(shí)際運(yùn)用

1.對(duì)集合排序

問題描述:在一個(gè)存放了Student對(duì)象的list中,按年齡進(jìn)行排序,輸出排序后的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進(jìn)行排序是這樣的:

// 使用 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.遍歷集合

//先準(zhǔn)備一個(gè)集合
        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 表達(dá)式以及函數(shù)操作(functional operation)
  list.forEach((student) -> System.out.println(student.getName() + ":"+student.getAge()));

3.遍歷集合(帶條件)

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

4.代替 Runnable,開啟一個(gè)線程

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表達(dá)式”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI