Java 匿名函数 Lambda表达式 和 Stream流

本文深入探讨了Java编程中Lambda表达式的使用及其在Stream流处理中的应用,详细阐述了如何通过Lambda简化代码并高效操作集合数据。

一 标题Java Stream流

LambdaStream
## 标题1. 函数式接口

JDK 1.8 版本以上有效
@FunctionalInterface 语法格式严格要求当前接口【有且只能有一个】尚未完成的 缺省属性为 public abstract 修饰方法。
Lambda 表达式和 方法引用使用的前提!!!
函数式接口一般用于方法的增强,直接作为方法的参数,实现【插件式编程】。

@FunctionalInterface
interface Test {
   
   
void test();
}
## 标题2. Lambda 表达式
基本格式:
(联想参数临时变量) -> {
   
   执行任务代码块}
Lambda 表达式关注的是接口中方法的【返回值】和【参数】
2.1 无参数无返回值 Lambda
接口设计
@FunctionalInterface
interface A {
   
   
    void 方法名真的没有用();
}
方法设计
/**
 * Lambda 测试方法,当前方法所需参数是 A 接口实例化对象,因为当前 A 接口
 * 是一个函数式接口,可以使用 Lambda 表达式解决问题
 *
 * @param a 函数式接口 A
 */
public static void testLambda(A a) {
   
   
    a.方法名真的没有用();
}
代码实现
public static void main(String[] args) {
   
   
    /*
    1. 匿名内部类方式
     */
    testLambda(new A() {
   
   
        @Override
        public void 方法名真的没有用() {
   
   
            System.out.println("无参数返回值 匿名内部类对象方法实现");
        }
    });

    /*
    2. Lambda 表达式实现
    【分析】
        void 方法名真的没有用();
        接口方法【返回值】 void
        接口方法【参数】 无参数
     Lambda 格式
        () -> {大括号中无需返回值类型}
     */
    testLambda(() -> {
   
   
        System.out.println("Lambda 表达式初体验");
    });

    // 【注意】Lambda 表达式有且只有一行代码,可以省略大括号
    testLambda(() -> System.out.println("Lambda 表达式初体验"));

    // 方法引用方式
    testLambda(Demo1::test);
}

public static void test() {
   
   
    System.out.println("方法引用");
}
## 标题2.2 有参数无返回值 Lambda

接口设计
Consumer<T> 消费者接口,数据最终处理接口,数据处理终止方法接口...因为当前接口中,数据有去无回
泛型可以在使用过程中,支持数据类型多样性,同时满足数据类型一致化要求!当前方法可以支持的数据类型满足所有情况。
 @FunctionalInterface
public interface Consumer<T> {
   
   
    /**
    * 消费者接口,数据最终处理接口,数据处理终止方法接口,对应的方法要求
    * 方法有参数无返回值
    *
    * @param t 泛型数据数据类型 T ,支持任意类型,在接口约束之后,要求符合
    *            数据类型一致化要求
    */
    void accept(T t);
}
方法设计
/**
 * 有参数无返回 Lambda 测试方法,方法参数是 String 类型和针对于 String 类型
 * 进行数据处理的 Consumer 接口,Consumer 接口可以传入实现类对象和 Lambda 表
 * 达式
 *
 * @param str    目标处理的 String 字符串数据
 * @param handle 已经约束为处理 String 类型数据的 Consumer 接口处理器
 */
public static void testLambda(String str, Consumer<String> handle) {
   
   
    /*
    需要方法外部提供针对于当前 String 字符串的处理能力。
    处理能力通过 Consumer 接口传入
     */
    handle.accept(str);
}
代码实现

public static void main(String[] args) {
   
   
    /*
    1、匿名内部类 Low
     */
    testLambda("孟州市炒面第一名", new Consumer<String>() {
   
   
        @Override
        public void accept(String t) {
   
   
            System.out.println(t);
        }
    });

    /*
    2. Lambda 表达式
    【分析】
        void accept(T t); ==> 泛型约束为 String ==> void accept(String t);
        接口方法【返回值】 void
        接口方法【参数】 1 个参数,String 类型
     Lambda 格式
        Lambda 小括号中的临时变量名称,没有数据类型体现,需要【联想】目标方法数据类型
        只按照参数的个数定义临时小变量
        (s) -> {大括号中无需返回值类型}
            Lambda 表达式临时变量 s 对应的数据类型为 String 类型 【联想可得】
     */
    testLambda("lambda表达式需要联想!!!", (s) -> {
   
   
        System.out.println(Arrays.toStri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值