【对lambda与方法引用的理解】

一、使用时机

  • 需要实现接口的方法,并且没有现成的方案——使用lambda
  • 需要实现接口的方法,并且已经有了现成的方案——使用方法引用

二、使用条件

Lambda

  1. 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。 无论是JDK内置的 Runnable 、 Comparator 接口还是自定义的接口,只有当接口中的抽象方法存在且唯一 时,才可以使用Lambda。
  2. 使用Lambda必须具有上下文推断。 也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。
    备注:有且仅有一个抽象方法的接口,称为“函数式接口”。
    摘自:https://www.cnblogs.com/King-boy/p/11256734.html

方法引用

  1. 在Lambda的条件基础上,实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致。

三、书写格式

lambda

  • (参数1,参数2…)-> {【代码块】}
  • ()-> 【单行代码】

方法引用

  • 对象名::实现方法(非静态)
  • 类::静态方法名
  • 类::实例方法(非静态)

四、demo

import org.junit.Test;

import java.util.Comparator;
import java.util.function.BiPredicate;
import java.util.function.Supplier;

/**
 * 测试Lambda与方法引用
 * @Author Zing_Lee
 * @Date 2021/12/8 17:28
 */
public class LambdaTest {

    @Test
    public void test01(){
        //使用lambda代替接口的方法体
        Student stu = new Student("张三",123);
        Supplier<String> sp = ()->stu.getName();
        System.out.println(sp.get());
        
        //使用方法引用代替接口的方法
        Supplier<String> sp2 = stu::getName;
        System.out.println(sp2.get());
    }
    @Test
    public void test02(){
        //使用lambda比较两个整型的大小
        Comparator<Integer> cpr = (x,y)->Integer.compare(x,y);
        System.out.println(cpr.compare(10,12));

        //使用方法引用比较两个整型的大小
        Comparator<Integer> cpr2 = Integer::compare;
        System.out.println(cpr2.compare(10,12));
    }
    @Test
    public void test03(){
        //使用lambda表达式比较两个字符串
        BiPredicate<String,String> bp1 = (x,y)->x.equals(y);
        System.out.println(bp1.test("12a","12a"));
        
        //使用方法引用比较两个字符串
        BiPredicate<String,String> bp2 = String::equals;
        System.out.println(bp2.test("12a","12a"));
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值