lambda表达式的使用

测试类

package com.shujia.day21.lambdademo4;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/*
    案例3:使用匿名内部类改进
        现在有一个存储员工的集合,员工id, name, age, salary
        需求1:过滤出年龄是大于18岁的,返回新的集合
        需求2:过滤出薪资是大于10000,返回新的集合

    使用lambda表达式改写的前提:
        1、要有一个接口
        2、接口中有且仅有一个抽象方法
    两个前提同时满足才可以使用lambda表达式改进

    lambda表达式写法:
        (xxx,xxx,...) -> {
            xxxx;
            return xxx;
        }
Lambda 是一个匿名函数,我们可以把Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。
可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

Lambda和匿名内部类的区别
Lambda是一个逻辑而匿名内部类是一个具体的类

Lambda 表达式底层Lambda 表达式被封装成了主类的一个私有方法,并通过 invokedynamic 指令进行调用,
并且书写 Lambda 表达式不会产生新的类。所以不能单纯的理解Lambda表达式和匿名内部类的实现原理是一样的,
但是可以理解为简化匿名内部类的写法。

 */
public class StaffDemo1 {
    private static List<Staff> staffList = Arrays.asList(
            new Staff("1001", "魏一民", 19, 11000),
            new Staff("1002", "陈真", 18, 12000),
            new Staff("1003", "李建国", 15, 7500),
            new Staff("1004", "徐思远", 16, 8000),
            new Staff("1005", "李卓", 29, 40000)
    );

    public static void main(String[] args) {
        //调用方法进行过滤
        List<Staff> staffList1 = filterStaff(staffList, (e)->{
            boolean b = e.getAge() > 18;
            return b;
        });

        /**
         *  () : 表示的是接口中那个唯一方法的参数
         *  e : 运行过程中方法接收的参数
         *  -> : lambda表达式标志,左边是参数,右边是方法体。
         */

        for (Staff staff : staffList1) {
            System.out.println(staff);
        }
        System.out.println("==========================================");
        List<Staff> staffList2 = filterStaff(staffList, e -> e.getSalary() > 10000);
        for (Staff staff : staffList2) {
            System.out.println(staff);
        }
    }

    public static List<Staff> filterStaff(List<Staff> staffList, FilterCondition filterCondition) {
        ArrayList<Staff> list = new ArrayList<>();

        for (Staff staff : staffList) {
            if (filterCondition.filter(staff)) {
                list.add(staff);
            }
        }

        return list;
    }
}

员工类

package com.shujia.day21.lambdademo4;

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

接口

package com.shujia.day21.lambdademo4;


@FunctionalInterface
public interface FilterCondition {
    boolean filter(Staff staff);
}
posted @ 2024-08-22 23:29  ていせい  阅读(1)  评论(0编辑  收藏  举报