day05—Java学习 黑马程序员JAVA p88-p96 笔记自用

一. Java基础

(十二)函数式编程

此“函数”类似于数学中函数(强调做什么),只要输入数据一致返回结果也一致。

  • 数学中函数:2x+1
  • Java中函数( lambda表达式 ):(x) -> 2x+1

【函数式编程】:使用使用lambda函数可以替代某些匿名内部类对象,从而让程序代码更简洁,可读性更好。

1. lambda

(1)基本概念

Lambda 表达式(或匿名函数)是函数式编程的一个重要特性,允许你以一种简洁的方式表达匿名函数(即没有名称的函数)。在许多现代编程语言中,Lambda 表达式让你能够快速定义和传递行为,而不需要定义一个单独的命名函数。

在 Java 中,Lambda 表达式的基本语法是:

(parameters) -> {expression}
  • parameters:是 Lambda 表达式的输入参数,即被重写方法的形参列表。
  • ->:箭头符号,表示"从"。
  • expression:Lambda 表达式的主体,即被重写方法的方法体代码。
2)函数式接口和@FunctionalInterface

注意:Lambda表达式并不可以简化全部的匿名内部类,Lambda只能简化函数式接口的匿名内部类。

【函数式接口】:有且仅有一个抽象方法的接口

-----函数式接口 必须 只包含 一个抽象方法,但是它 可以 包含其他成员,如常量、静态方法、默认方法等。

我们可以用【@FunctionalInterface】声明一个函数式接口,该注解用于约束当前接口必须是函数式接口:

@FunctionalInterface
public interface MyFunctionalInterface {
    void abstractMethod();  // 抽象方法
}

 Arrays.sort(numbers, (a, b) -> b - a);就是很常见的一种用lambda表达式简化匿名内部类的写法:

如果不使用 Lambda 表达式,通常我们会使用匿名内部类来实现 Comparator 接口。它的写法相对较为冗长:

Arrays.sort(numbers, new Comparator<Integer>() {
    @Override
    public int compare(Integer a, Integer b) {
        return b - a;  // 降序排序
    }
});

Lambda 表达式将上述匿名内部类简化为:

Arrays.sort(numbers, (a, b) -> b - a);
(3)Lambda 表达式的省略规则
  1. 参数类型可以全部省略不写
  2. 如果只有一个参数,参数类型省略的同时“()”也可以省略,但是多个参数不能省略“()”;
  3. 如果Lambda 表达式中只有一行代码,大括号可以不写,同时要省略分号“;”,并且如果这行代码是return语句,也必须去掉return。

2. 方法引用

Lambda 表达式可以简化函数式接口的匿名内部类,而方法引用是用于简化Lambda 。

(1)静态方法引用
  • 格式:【类名::静态方法】
  • 使用场景:如果某个Lambda表达式里只是调用一个静态方法,并且“—>”前后参数形式一致,就可以使用静态方法引用。

如:

import java.util.Arrays;

public class StaticMethodReferenceExample {
    public static void main(String[] args) {
        Integer[] numbers = {1, 3, 2, 5, 4};
        
        // 使用静态方法引用进行排序
        Arrays.sort(numbers, Integer::compare);//静态方法引用
        
        // 输出排序后的数组
        System.out.println(Arrays.toString(numbers));
    }
}

--  上例中的Integer::compare 是对 Integer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值