Lambda表达式

本文深入探讨Lambda表达式在Java中的应用,从函数式编程思想出发,对比面向对象编程,详解Lambda表达式的语法和格式,包括多线程实现、数组排序及参数返回值的处理,同时介绍Lambda表达式的省略格式及其使用前提。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lambda表达式

面向对象:做一件事情,找一个能解决这个事情的对象,调用对象的方法来完成事情

**函数式编程思想:**只要能获取到结果,谁去做的,怎么做的不重要,结果为主,不考虑过程。

冗余的Runnable代码:

​ 方法的名称,返回值和调用方法需要实现相应的类。均是冗余的代码。

public class RunableImpl implements Runnable{
    public void run(){
        sout.println("新的线程创建了")}
}
public class Demo{
    public static void main(String[] args){
        RunableImpl run = new RunnableImpl();
        Thread t =  new Rhread(run);
        t.start();
    }
    //简化写法
    new Thread(new Runnable(){
       public void run(){
        sout.println("新的线程创建了")} 
    }).start();
   
}

一、使用lambda表达式实现多线程

()参数类表 ->将前面的参数传递给后面的{}内容

public class RunableImpl implements Runnable{
    public void run(){
        sout.println("新的线程创建了")}
}
public class Demo{
    public static void main(String[] args){
        RunableImpl run = new RunnableImpl();
        Thread t =  new Rhread(run);
        t.start();
    }
    //Lambda写法
    new Thread(()->{
         sout.println("新的线程创建了")}
   ).start();
   
}

二、Lambda标准格式

标准格式由三部分构成:

​ **一些参数:(**参数) 接口中抽象方法的参数列表。

一个箭头:把参数传递给方法体。

一段代码:{具体方法体}

(参数列表)->{一些重写方法的代码}
1.无参无返回类型
public interface Cook{
    void makeFood();
}
public class DemoInvokeCook{
    public static  void main(String[] args){
        incokeCook(()->{
            System.out.println("吃饭了");
        });
    }
    public static void invokeCook(Cook cook){
        cook.makeFood();
    }
}
2.使用数组存储多个person对象,对数组中的Person使用Array的sort方法按照年龄升序排序。
class Person{
    String name;
    Integer  age;
    get&set();
    
}
public class DemoIperson{
    public static  void main(String[] args){
        Person[] arr={
            new Person("张三"19);
            new Person("李四"20);
            new Person("王五"15);
        };
        Arrays.sort(arr,new Comparator<Persion>(){
            public int compare(Person 01,Person o2){
                return 01.getAge()-o2.getAge();
            }
        });
        
       //lambda
        Arrays.sort(arr,(Person 01,Person o2)->{ return 01.getAge()-o2.getAge();});
    }
   
}
3.有参数有返回值
package com.yuwendeng.Lambda;

public interface Calculator {
    public abstract int calc(int a,int b);
}

package com.yuwendeng.Lambda;

public class Demo {
    public static void main(String[] args) {
        invokeCalc(10, 20, new Calculator() {
            @Override
            public int calc(int a, int b) {
                return a+b;
            }
        });
        //lambda表达死
        invokeCalc(10,20,(int a,int b)->{return  a+b;});
    }
    public static void invokeCalc(int a,int b,Calculator c){
        int sum = c.calc(a,b);
        System.out.println(sum);
    }
}

三、lambda省略格式和使用前提

(参数列表)->{一些重写方法的代码}

  1. 参数列表的数据类型可以不写

  2. 参数只有一个,类型和()都可以省略

  3. 如果{ }中的语句如果只有一行,可以省略{},还可以省略return 以及 ;(要省略,三者同时省略)···

invokeCalc(10,20,(a,b)-> a+b);//省略后
invokeCalc(10,20,(a,b)-> a+b);//省略前

使用前提;

​ 必须有接口,只能有一个抽象方法;

​ 必须有上下文推断。

说明:

​ 有且只有一个抽象方法的接口称为函数式接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值