当前位置: 首页 > article >正文

【多线程】-- 05 Lambda表达式

多线程

4 Lambda表达式

  • λ是希腊字母表中排序第十一位的字母,英语名称为Lambda
  • 是为了避免匿名内部类定义过多
  • 实质属于函数式编程的概念

为什么要使用Lambda表达式?

  1. 避免匿名内部类定义过多
  2. 可以让代码看起来很简洁
  3. 去掉了一堆没有意义的代码,而只留下核心的逻辑

理解Functional Interface(函数式接口)是学习Java8 Lambda表达式的关键所在。

函数式接口的定义:

  • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。

  • public interface Runnable {
        public abstract void run(); //接口中定义的方法默认隐式声明为抽象方法,故可以省略abstract
    }
    
  • 对于函数式接口,可以通过Lambda表达式来创建该接口的对象

下面将用代码演示Lambda表达式的推导:

package com.duo.lambda;

//演示:推导Lambda表达式
public class LambdaTest1 {
    //3.静态内部类
    static class Like2 implements ILike {
        @Override
        public void lambda() {
            System.out.println("2: I like lambda");
        }
    }

    public static void main(String[] args) {
        ILike like = new Like();  //ILike:向上转型
        like.lambda();

        Like2 like2 = new Like2();
        like2.lambda();

        //4.局部内部类
        class Like3 implements ILike {
            @Override
            public void lambda() {
                System.out.println("3: I like lambda");
            }
        }
        Like3 like3 = new Like3();
        like3.lambda();

        //5.匿名内部类:没有类的名称,必须借助接口或者父类
        like = new ILike() {
            @Override
            public void lambda() {
                System.out.println("4: I like lambda");
            }
        };
        like.lambda();

        //6.用Lambda表达式简化
        like = () -> {
            System.out.println("5: I like lambda");
        };
        like.lambda();
    }

}

//1.先定义一个函数式接口
interface ILike {
    void lambda();
}

//2.实现接口类
class Like implements ILike {
    @Override
    public void lambda() {
        System.out.println("1: I like lambda");
    }
}

运行结果:

图1

带有参数的Lambda表达式:

package com.duo.lambda;

public class LambdaTest2 {

    public static void main(String[] args) {
        //Lambda表达式写法的简化
        ILove love = (int a) -> {
            System.out.println("1: I love you -> " + a);
        };
        love.lambda(2);
    }
}

interface ILove {
    void lambda(int a);
}

运行结果:

图2

此外,Lambda表达式还有一些更简化的写法,但用法比较受限,具体总结如下:

  • Lambda表达式的代码体中,在只有一行代码的情况下,才能将整个Lambda表达式简化为一行;如果代码体有多行,就需要以代码块包裹
  • 使用Lambda表达式前提:接口为函数式接口
  • 当接口中的方法为多个参数时,Lambda表达式也可以去掉参数类型的声明


http://www.kler.cn/a/148589.html

相关文章:

  • 3D绘制动态爱心Matlab
  • 网站小程序app怎么查有没有备案?
  • 阿里巴巴通义灵码推出Lingma SWE-GPT:开源模型的性能新标杆
  • HarmonyOS Next星河版笔记--界面开发(4)
  • Java 网络编程(一)—— UDP数据报套接字编程
  • Gurobi学术版+Anaconda安装步骤
  • [带余除法寻找公共节点]二叉树
  • Python入门学习篇(四)——if详解
  • Leetcode刷题之用队列实现栈(C语言版)
  • 【rust:tauri-app踩坑记录】dangerousRemoteDomainIpcAccess 不适用于IP地址,临时解决方案
  • bash编程 数组和for循环的应用
  • Unity性能优化技巧篇
  • QTextEdit 是 Qt 框架中的一个小部件(Widget),用于显示和编辑多行文本内容
  • ES6模块化导出
  • 使用jmx_exporter监控Kafka
  • Week-T11-优化器对比试验
  • 计算机毕业设计php+bootstrap小区物业管理系统
  • 什么是高级语言、机器语言、汇编语言?什么是编译和解释?
  • 数据结构与算法之贪心: LeetCode 860. 柠檬水找零 (Typescript版)
  • 云服务器哪家便宜?亚马逊AWS等免费云服务器推荐
  • 【Python百宝箱】密码学之美:Python安全性实战手册
  • TMUX设置鼠标滚轮滑动来浏览之前的前面内容--复制文字
  • java: Internal error in the mapping processor: java.lang.NullPointerException
  • 精通Nginx(18)-FastCGI/SCGI/uWSGI支持
  • 人工智能|机器学习——机器学习如何判断模型训练是否充分
  • JMeter+Python 实现异步接口测试