Lambda表达式

简介: Lambda表达式

 Lambda只留下参数和方法体!

Lambda只留下参数和方法体!

Lambda只留下参数和方法体!

image.gif编辑

案例一

package com.zsh.lambda;
/**
 * 案例一
 * 线程的内部类
 */
public class LambdaOne {
    public static void main(String[] args) {
        // Lambda简化前
        Thread oneThread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程1的中run方法被执行了");
            }
        });
        // 启动线程
        oneThread.start();
        // Lambda简化后
        Thread twoThread = new Thread(() -> {
            System.out.println("线程2的中run方法被执行了");
        });
        // 启动线程
        twoThread.start();
    }
}

image.gif

案例二

package com.zsh.lambda;
import java.util.function.IntBinaryOperator;
/**
 * 案例二
 * 求和
 * 求差
 */
public class LambdaTwo {
    public static void main(String[] args) {
        // 简化前
        int sumOne = sumNum(new IntBinaryOperator() {
            @Override
            public int applyAsInt(int left, int right) {
                return left + right;
            }
        });
        System.out.println("a + b = " + sumOne);
        // 简化后
        int sumTwo = sumNum((left, right) -> {
            return left - right;
        });
        System.out.println("a - b = " + sumTwo);
    }
    public static int sumNum(IntBinaryOperator operator){
        int a = 10;
        int b = 20;
        return operator.applyAsInt(a,b);
    }
}

image.gif

案例三

package com.zsh.lambda;
import java.util.function.IntPredicate;
/**
 * 案例三
 * 求奇数偶数
 */
public class LambdaThree {
    public static void main(String[] args) {
        // 简化前
        printNum(new IntPredicate() {
            @Override
            public boolean test(int value) {
                return value % 2 == 0;
            }
        });
        // 简化后
        printNum(value -> {
            return value % 2 != 0;
        });
    }
    public static void printNum(IntPredicate predicate){
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        for (int i : arr) {
            if (predicate.test(i)){
                System.out.println(i);
            }
        }
    }
}

image.gif

案例四

package com.zsh.lambda;
import java.util.function.Function;
/**
 * 案例四
 * 对泛型的操作
 */
public class LambdaFour {
    public static void main(String[] args) {
        // 简化前
        Integer resultOne = typeConver(new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                // 将String转换成Integer
                Integer strResult = Integer.valueOf(s);
                return strResult;
            }
        });
        System.out.println(resultOne);
        // 简化后
        Integer resultTwo = typeConver((String s) -> {
            // 将String转换成Integer
            Integer strResult = Integer.valueOf(s);
            return strResult;
        });
        System.out.println(resultTwo);
        // 再次简化
        String redisThree = typeConver((String s) -> {
            return s + "这是再一次的优化";
        });
        System.out.println(redisThree);
    }
    public static <R> R typeConver(Function<String, R> function) {
        String str = "12345";
        R result = function.apply(str);
        return result;
    }
}

image.gif

案例五

package com.zsh.lambda;
import java.util.function.IntConsumer;
/**
 * 第五个案例
 */
public class
LambdaFive {
    public static void main(String[] args) {
        // 简化前
        foreachArr(new IntConsumer() {
            @Override
            public void accept(int value) {
                System.out.println(value);
            }
        });
        System.out.println("--------------------");
        // 简化后
        foreachArr((int value) -> {
            System.out.println(value);
        });
        System.out.println("--------------------");
        // lambda省略写法
        // 参数类型可以推导出来,直接省略
        foreachArr((value) -> {
            System.out.println(value);
        });
        // 只有一个参数,小括号直接省略
        foreachArr(value -> {
            System.out.println(value);
        });
        // 只有一句代码时,大括号、return、分号都可以省略
        foreachArr(value -> System.out.println(value));
        // 记不住以上规则,可以不省略
        foreachArr((int value) -> {
            System.out.println(value);
        });
    }
    public static void foreachArr(IntConsumer consumer){
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        for (int i : arr) {
            consumer.accept(i);
        }
    }
}

image.gif

最后:

1、参数类型可以推导出来,直接省略

2、只有一个参数,小括号直接省略

3、只有一句代码时,大括号、return、分号都可以省略

4、记不住以上规则,可以不省略!直接快捷键:ALT+Enter

相关文章
|
机器学习/深度学习 Linux 决策智能
双系统出现grub rescue修复方法
双系统出现grub rescue修复方法
1257 0
|
SQL 数据采集 分布式计算
基于DataWorks+MaxCompute的公共电影票房数据预处理实践
本次实验对春节档每日票房的数据进行预处理,主要是数据清洗(例如空值过滤,条件筛选),数据转换(例如含有相同属性的两条数据合并为一条数据)。通过本次实验让大家掌握阿里云大数据产品DataWorks及MaxCompute的基本使用。
EDM营销平台有哪些?Top5平台分析
探索五大热门EDM营销平台:蜂邮EDM以其丰富功能备受喜爱;Constant Contact以用户友好体验著称;Sendinblue结合短信营销与广告管理,适合中小企业;GetResponse提供营销自动化解决方案,适合各类企业;AokSend以其历史底蕴和分析工具吸引用户。各平台特色各异,企业可根据需求选择。
|
机器学习/深度学习 存储 人工智能
边缘AI与嵌入式存储器的革新:实现数据智能化的关键
边缘AI与嵌入式存储器的革新:实现数据智能化的关键
771 10
|
安全 物联网 数据安全/隐私保护
ensp中PPPOE (点对点协议)原理和配置命令
ensp中PPPOE (点对点协议)原理和配置命令
819 0
|
数据处理 索引 Python
Pandas常见问题与解决方案:避开数据处理中的坑
【4月更文挑战第16天】本文总结了Pandas数据处理中的常见问题及解决方案:1) 数据类型不匹配,使用`astype`转换;2) 缺失值处理,用`dropna`删除或`fillna`填充;3) 内存占用过大,通过选择性加载列、指定`dtype`和使用`chunksize`分块处理;4) 合并数据问题,确保键匹配和正确合并方式;5) 排序和分组聚合错误,使用`sort_values`/`sort_index`和`groupby`配合聚合函数。掌握这些技巧可提高数据处理效率。
|
安全 关系型数据库 Shell
PostgresSQL未授权导致命令执行
PostgresSQL未授权导致命令执行
976 0
|
存储 数据采集 监控
数据治理利器Dataphin:数据安全管理3步走,保障全链路数据安全(V3.11版本)
瓴羊Dataphin(智能数据建设与治理),一直在探索数据安全管理能力的产品化最佳实践,即如何帮助企业利用产品工具能力,基于法律法规、主管部门要求和自身行业和业务的需要,建立起规范的分级分类制度,并对敏感数据制定相应的保护策略。企业通过Dataphin构建起合规的数据安全体系,将数据安全风险降至最低,让数据资产在安全合规的基础上,得到最大的价值释放。
1071 4
|
存储 Web App开发 编解码
FastASR+FFmpeg(音视频开发+语音识别)(一)
FastASR+FFmpeg(音视频开发+语音识别)(一)
395 0
|
Kubernetes Cloud Native Nacos
Nacos架构与原理 -服务网格生态
Nacos架构与原理 -服务网格生态
482 0

热门文章

最新文章