函数式编程思想——Lambda表达式

函数式编程思想——Lambda表达式

Lambda是JDK1.8之后的新特性,传统的编程思想是面向对象的,即想调用一个方法时,需要创建一个对象,再调用这个对象中的方法。而函数式编程只要结果正确,而不在意对象是谁,方法名是谁。面向对象的编程会产生大量的冗余代码(实现类对象,重写方法等),而且这些冗余代码是必要的。而函数式编程思想,则大大减少了冗余代码。Lambda表达式就是函数式编程思想的具体表现形式。

//比较传统编程与lambda表达式
public static void main(String[] args) {
        //1.面向对象的传统编程
        new Thread(new Runnable() {//新建匿名对象
            @Override//重写方法
            public void run() {
                System.out.println(Thread.currentThread().getName()+"线程运行");
            }
        }).start();
        //2.函数式编程思想的lambda表达式
        new Thread(() ->{
                System.out.println(Thread.currentThread().getName()+"线程运行");
            }
        ).start();
    }

lambda表达式使用前提:必须有接口,且接口中只有一个抽象方法,又名“函数式接口”。
lambda表达式的格式:
(参数列表)->{方法体}
lambda表达式也可以有更简单的省略写法,总的来说,可推导,就可省略:
可省略的内容:
1.(参数列表):数据类型可省略
2.(参数列表):只有一个参数时,数据类型和()可省略
3.{方法体}:如果方法体只有一行,可省略{}、return、;
注意:{}、return、;必须一起省略
eg:
1.重写方法无参无返回值时:

//interface
public interface Cook {
    void makeFood();
}
//main
public static void main(String[] args) {
        invokeCook(()->{
            System.out.println("吃饭喽");
        });
        //省略格式
        invokeCook(()->System.out.println("吃饭喽"));
    }
    public static void invokeCook(Cook cook){
        cook.makeFood();
    }

2.重写方法有参有返回值:

//Person类
public class Person {
    private String name;
    private int age;

    //使用sort排序需要重写equals和hashCode方法

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    //省略构造器,Getter、Setter、toString
}
public static void main(String[] args) {
        //新建ArrayList数组,存储Person对象
        ArrayList<Person> people = new ArrayList<>();
        people.add(new Person("张四",17));
        people.add(new Person("张七",150));
        people.add(new Person("张五",18));
        people.add(new Person("张三",15));
        //调用sort方法排序
        Collections.sort(people, (Person o1, Person o2)-> {
                return o1.getAge() - o2.getAge();
            }
        );
        //省略格式
        Collections.sort(people, ( o1,  o2)->o1.getAge() - o2.getAge());
        //输出
        System.out.println(people);
    }

3.重写方法有参无返回值时:

//interface
public interface Calculator {
    void cacl(int a,int b);
}
//main
public static void main(String[] args) {
        invokeCalc(120, 130,(a,b)->{
            System.out.println(a+b);
        });
        //省略格式
        invokeCalc(120, 130,(a,b)->System.out.println(a+b));
    }


    public static void invokeCalc(int a,int b,Calculator calc){
        calc.cacl(a,b);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值