lambda表示式的寫法1

你的镁偷走了我的锌發表於2024-10-18

一、lambda表示式的含義

Lambda 表示式是 Java 8 引入的一種簡潔的語法,用於表示匿名函式或傳遞行為。它使得我們可以更簡潔地表達程式碼中的行為和函式邏輯,特別是在使用函式式介面時(如 Consumer、Supplier、Function<T, R> 等)。Lambda 表示式可以大大簡化程式碼,尤其是當我們需要為介面的單個抽象方法提供實現時。

二、基本的寫法

interface Inter1 {
    void fun1();
}

interface Inter2 {
    void fun1(String s);
}

interface Inter3 {
    String fun1(String s1, String s2);
}

public class LambdaDemo {
    public static void main(String[] args) {
        /**
         * 場景1
         */
        //無引數,無返回值
//        show1(()->{
//            System.out.println("好好學習,天天向上!");
//        });
        // 如果方法邏輯體只有一行的時候,可以將大括號省略
//        show1(()-> System.out.println("好好學習,天天向上!"));

        /**
         * 場景2
         */
        // 有一個引數,無返回值
//        show2((String s)->{
//            System.out.println(s+": 江川");
//        });
        // 左邊的引數型別可以省略不寫, jvm會做自動型別上下文推斷
//        show2((s) -> System.out.println(s + ": 江川"));
        // 若只有一個引數,小括號可以省略不寫
//        show2(s -> System.out.println(s + ": 江川"));

        /**
         * 場景3
         */
        //有兩個以上的引數,有返回值,並且 Lambda 體中有多條語句
//        show3((String s1,String s2)->{
//            return s1+"-數加-"+s2;
//        });
        // 若Lambda 體中只有一條語句,return和大括號都可以省略不寫
//        show3((s1, s2) -> s1 + "-數加-" + s2);

    }

    public static void show3(Inter3 inter3) {
        System.out.println(inter3.fun1("hello", "world"));
    }

    public static void show2(Inter2 inter2) {
        inter2.fun1("hello");
    }

    public static void show1(Inter1 inter1) {
        inter1.fun1();
    }
}

三、具體例項

1.先建立一個Staff類,裡面有基本的成員

public class Staff {
    private String id;
    private String name;
    private int age;
    private int salary;

    public Staff() {
    }

    public Staff(String id, String name, int age, int salary) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    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;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Staff{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", salary=" + salary +
                '}';
    }
}

2.進行測試使用lambda表示式

1.Staff類同上,這裡就不重複寫了

2.編寫介面

public interface FilterStaff {
     boolean fun(Staff staff);
}

3.案例

import java.util.ArrayList;

import java.util.List;

public class StaffDemo1 {

    public static void main(String[] args) {
        ArrayList<Staff> list1 = new ArrayList<>();
        list1.add(new Staff("sj1001","彭于晏",23,30000));
        list1.add(new Staff("sj1002","吳彥祖",13,10000));
        list1.add(new Staff("sj1003","胡歌",21,24000));
        list1.add(new Staff("sj1004","章若楠",18,26000));
        list1.add(new Staff("sj1005","楊冪",26,35000));
        //需求:過濾出薪資大於20000的人的資訊
        List<Staff> list2= FilterWithCollection(list1,s-> s.getSalary()>20000);
        for (Staff staff : list2) {
            System.out.println(staff);
        }
    }

    public static List<Staff> FilterWithCollection(List<Staff> staff,FilterStaff filterStaff){
        ArrayList<Staff> staff1 = new ArrayList<>();
        for (Staff staff2 : staff) {
            if(filterStaff.fun(staff2)){
                staff1.add(staff2);
            }
        }
        return staff1;
    }
}

相關文章