Java8新特性-Lambda表达式与方法引用

本文介绍了Java8中的Lambda表达式及其使用,包括可选的类型声明、参数圆括号、大括号和返回关键字。Lambda表达式实际上是将抽象接口的实现作为参数传递,实现函数式编程。文章还详细讲解了forEach方法、函数式接口的概念,重点讨论了Predicate接口的用途和进阶方法。最后,讨论了Lambda表达式与匿名类的联系和区别,并简要说明了方法引用的四种形式。
摘要由CSDN通过智能技术生成

Lambda表达式

如果一个接口只有一个能够代表它的一个抽象方法,那么我们可以使用lambda表达式将这个类的实现表示出来

  • 可选类型声明: 无需声明参数类型,编译器即可自动识别

  • 可选的参数圆括号: 仅有一个参数时圆括号可以省略

  • 可选的大括号:主体只包含一个语句时可省略大括号

  • 可选的返回关键字:主体只包含一个表达式返回值并省略大括号时,编译器会自动return返回值;有大括号时,需要显式指定表达式return了一个数值

实现接口方式

interface MathOperation {
    int operation(int a, int b);
}

class MathMyOperation implements MathOperation{
    @Override
    public int operation(int a, int b) {
        return a-b;
    }
}

public class Java8Tester {
    public static void main(String args[]){
        // 接口实现类
        MathOperation mathOperation0 = new MathMyOperation();
        int i1 = mathOperation0.operation(10, 5);
      	System.out.println(i1);
    }
}

匿名实现类方式

interface MathOperation {
   
    int operation(int a, int b);
}

public class Java8Tester {
   
    public static void main(String args[]){
   

        // 匿名实现类
        MathOperation mathOperation = new MathOperation() {
   
            @Override
            public int operation(int a, int b) {
   
                return a-b;
            }
        };
        int i2 = mathOperation.operation(10,5);
        System.out.println(i2);
    }
}

Lambda表达式方法

interface MathOperation {
   
    int operation(int a, int b);
}

public class Java8Tester {
   
    public static void main(String args[]){
   
        /**
         * Lambda表达式
         * 如果一个接口只有一个能够代表它的一个抽象方法,那么我们可以使用lambda表达式将这个类的实现表示出来
         */
        MathOperation addition = (a, b) -> a - b;
        int i3 = addition.operation(10, 5);
        System.out.println(i3);
    }
}

参考Lambda表达式的一个规律,我们会发现,Lambda表达式其实是一个方法级别的表达,它有着以下的一些特点

  • 接口中只有一个抽象方法时。
  • 它的传参都是基于那个唯一的抽象方法来进行的。
  • ()表示的是传入的参数,而{}表示的是方法里需要执行的语句。

Lambda基操

// 1. 不需要参数,返回值为 5  
() -> 5  
  
// 2. 接收一个参数(数字类型),返回其2倍的值  
x -> 2 * x  
  
// 3. 接受2个参数(数字),并返回他们的差值  
(x, y) -> x – y  
  
// 4. 接收2个int型整数,返回他们的和  
(int x, int y) -> x + y  
  
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
(String s) -> System.out.print(s)

// 6. 使用大括号进行返回
(int a, int b) -> {
    return a * b; };

传入某个变量到Lambda表达式中时,必须传入常量。即使不是常量,也需要默认为常量,即不可修改的变量。

final int c = 10;
MathOperation addition1 = (a, b) -> a - b + c;
int i4 = addition1.operation(10,5);
System.out.println(i4);

Lambda表达式的实质

Lambda表达式它的一些使用方法就如上所示,但是在Lambda表达式的本质其实是将一个抽象接口中的抽象方法当成参数进行传递,达到函数式编程的目的。虽然Lambda表达式将抽象方法当成参数传递,但是传入的参数其实是这个抽象类型的实现类,达到的作用和匿名实现类是一致的。

public class Java8Tes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值