【Java学习】Lambda表达式

本文介绍了函数式编程思想,特别是Java 8中的Lambda表达式。Lambda简化了匿名内部类的使用,使得代码更加简洁。它适用于实现只有一个抽象方法的函数式接口。通过实例展示了Lambda如何省略参数类型、小括号以及简化方法体,遵循特定的省略规则。Lambda表达式是Java 8引入的重要特性,用于提高代码的可读性和效率。
摘要由CSDN通过智能技术生成

Lambda表达式

1 函数式编程思想概述

在数学中,函数就是有输⼊量、输出量的⼀套计算⽅案,也就是“拿什么东⻄做什么事情”。相对⽽⾔,⾯向对象过分强调“必须通过对象的形式来做事情”,⽽函数式思想则尽量忽略⾯向对象的复杂语法 – 强调做什么,⽽不是以什么形式做
⾯向对象的思想:
做⼀件事情,找⼀个能解决这个事情的对象,调⽤对象的⽅法,完成事情。
函数式编程思想:
只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程。

2 使用前提

​ 0 JDK8开始引入语法

​ 1.匿名内部类实现接口
​ 2.这个接口是函数式接口: 接口中只有一个抽象方法
​ @FunctionalInterface 注解
​ 3.作为方法参数使用

3 简化过程

语法: (参数) -> { 要实现的那个方法的方法体 }

例1:
/*
 * 匿名内部类: implements Runnable
 */
Thread t = new Thread(new Runnable() {
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
    }
});

代码分析:

1.能确定传的参数类型是Runnable类型
2.能确定实现的方法是 run 方法

简化后:

Thread t1 = new Thread(() -> {
    for (int i = 0; i < 10; i++) {
        System.out.println(i);
    }
});
例2:
Integer[] arr = {8, 23, 17, 10, 2};
Arrays.sort(arr, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2-o1;
    }
});
System.out.println(Arrays.toString(arr));
  1. 初步简化 -> 匿名内部类 简化成了 lambda 表达式

    Arrays.sort(arr, (Integer o1, Integer o2) -> {
        return o2-o1;
    });
    
  2. 如果方法有参数, 参数类型也可以省略

    Arrays.sort(arr, (o1, o2) -> {
        return o2-o1;
    });
    
  3. 如果方法体中只有一句话, 不论方法中需不需要返回值
    return 可以省略
    {} 可以省略
    ; 可以省略
    注意: 要省就一起省

最终简化:

Arrays.sort(arr, (o1, o2) -> o2-o1);
例3:
m1(new Koo() {
    public int factorial(int n) {
        int result = 1;
        for(int i = 1; i <= n; i++) {
            result *= i;
        }
        return result;
    }
});

简化成lambda表达式

m1((int n) -> {
    int result = 1;
    for(int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
});

第二次简化参数类型

m1((n) -> {
    int result = 1;
    for(int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
});

第三次简化: 方法参数只有一个, 可以省略 ()

m1(n -> {
    int result = 1;
    for(int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
});

4 省略规则

  1. ⼩括号内参数的类型可以省略;
  2. 如果⼩括号内有且仅有⼀个参,则⼩括号可以省略;
  3. 如果⼤括号内有且仅有⼀个语句,则⽆论是否有返回值,都可以省略⼤括号、return关键字及语句分号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值