Java Lambda 表达式

简介: Java Lambda 表达式

一、说明


Lambda表达式是什么


  • Lambda 表达式也称为闭包,是Java 8 发布的新特性


  • Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)


为什么要使用Lambda表达式


  • 避免匿名内部类定义过多,可以让代码简洁紧凑,留下核心的逻辑


二、理解


语法格式


(parameters) -> expression[表达式]
(parameters) -> statements[语句]
(parameters) ->{ statements; }


函数式接口


Functional lnterface(函数式接口)是指任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口,可以通过Lambda表达式创建该接口的对象


public interface Runnable {
    public abstract void run();
}


特征


  • 可省略类型声明:不需要声明形式参数类型


  • 可省略参数括号:一个参数无需定义括号,但多个参数需要定义括号


  • 可省略花括号:如果主体只包含了一个语句就不需要使用花括号


  • 可省略返回关键字:如果主体只包含了一个返回值语句则会自动返回


三、演示


1.常规方法实现


正常情况下的实现加法函数计算,需要定义接口并实现类,再调用方法,在此基础上不断简化,去深入理解Lambda 表达式是如果做到的



public class LambdaDemo {
    public static void main(String[] args) {
    //3.执行计算
        MathOperation addition = new Addition();
        addition.operation(1,2);
    }
}
    //1.定义一个函数式接口方法
interface MathOperation{
    void operation(int a, int b);
}
    //2.定义实现类
class Addition implements MathOperation{
    @Override
    public void operation(int a, int b) {
        System.out.println(a + b);
    }
}


2.静态内部类


进一步改进使得代码更紧凑,实现静态内部类,也就是将实现类放入主类中,会提示我们需要定义静态类




public class LambdaDemo {
    //2.实现静态内部类
    static class Addition implements MathOperation{
        @Override
        public void operation(int a, int b) {
            System.out.println(a + b);
        }
    }
    public static void main(String[] args) {
    //3.执行计算
        MathOperation addition = new Addition();
        addition.operation(1,2);
    }
}
    //1.定义一个函数式接口
interface MathOperation{
    void operation(int a, int b);
}


3.局部内部类


可是静态内部类还是太繁琐了,如果把它放进方法里面呢?由此引出局部内部类,即在一个方法中定义的内部类,这时就不用定义静态类了



public class LambdaDemo {
    public static void main(String[] args) {
    //2.实现局部内部类
        class Addition implements MathOperation{
            @Override
            public void operation(int a, int b) {
                System.out.println(a + b);
            }
        }
    //3.执行计算
        MathOperation addition = new Addition();
        addition.operation(1,2);
    }
}
    //1.定义一个函数式接口
interface MathOperation{
    void operation(int a, int b);
}


4.匿名内部类


局部内部类还是感觉代码太多了,如果简化呢?比如把类名隐藏?匿名内部类就是没有名字的内部类,其必须实现接口或抽象父类的所有抽象方法



public class LambdaDemo {
    public static void main(String[] args) {
    //2.实现匿名内部类,实现接口,直接执行计算
        new MathOperation(){
            @Override
            public void operation(int a, int b) {
                System.out.println(a + b);
            }
        }.operation(1, 2);
    }
}
    //1.定义一个函数式接口
interface MathOperation{
    void operation(int a, int b);
}



public class LambdaDemo {
    public static void main(String[] args) {
    //2.实现匿名内部类,实现接口
        MathOperation addition = new MathOperation() {
            @Override
            public void operation(int a, int b) {
                System.out.println(a + b);
            }
        };
    //3.执行计算
        addition.operation(1,2);
    }
}
    //1.定义一个函数式接口
interface MathOperation{
    void operation(int a, int b);
}


5.Lambda表达式


都已经没有类名了,能否再简化呢?用Lambda试试,因为接口中只有一个方法,方法中只有一块语句,因此可以省略接口和方法,只留下语句实现



public class LambdaDemo {
    public static void main(String[] args) {
        //2.Lambda简化,只有一块语句,省略接口和方法,只留下语句实现
        MathOperation addition = (int a , int b) -> {
            System.out.println(a + b);
        };
        //3.执行计算
        addition.operation(1, 2);
    }
}
        //1.定义一个函数式接口
interface MathOperation{
    void operation(int a, int b);
}


6.Lambda再简化


Lambda 表达式还可以省略参数类型,因为一行语句,因此可以省略花括号



public class LambdaDemo {
    public static void main(String[] args) {
        //2.Lambda简化,省略参数类型,代码块只有一句,可以省略花括号
        MathOperation addition = (a , b) -> System.out.println(a + b);
        //3.执行计算
        addition.operation(1,2);
    }
}
        //1.定义一个函数式接口
interface MathOperation{
    void operation(int a, int b);
}


目录
相关文章
|
3月前
|
Java 编译器 API
Java Lambda表达式与函数式编程入门
Lambda表达式是Java 8引入的重要特性,简化了函数式编程的实现方式。它通过简洁的语法替代传统的匿名内部类,使代码更清晰、易读。本文深入讲解Lambda表达式的基本语法、函数式接口、方法引用等核心概念,并结合集合操作、线程处理、事件回调等实战案例,帮助开发者掌握现代Java编程技巧。同时,还解析了面试中高频出现的相关问题,助你深入理解其原理与应用场景。
|
3月前
|
安全 Java API
Java中的Lambda表达式:简洁与功能的结合
Java中的Lambda表达式:简洁与功能的结合
408 211
|
3月前
|
安全 Java
Java中的Switch表达式:更简洁的多路分支
Java中的Switch表达式:更简洁的多路分支
473 211
|
3月前
|
Java 编译器
Java 17 Switch表达式:更简洁、更强大的流程控制
Java 17 Switch表达式:更简洁、更强大的流程控制
|
4月前
|
设计模式 数据采集 Java
Java正则表达式的基础知识,进阶至熟练掌握。
通过大量的练习来熟悉它们的识别模式、如何设计模式来解决实际问题,才能够逐步达到熟练掌握。更多的是通过实践、编写代码和解决真实问题来完善技能。在这方面,没有快速的捷径,唯有刻意练习和长时间的代码实践。
96 0
|
4月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
314 14
|
5月前
|
SQL JSON 安全
Java 8 + 中 Lambda 表达式与 Stream API 的应用解析
摘要:本文介绍了Java 8+核心新特性,包括Lambda表达式与Stream API的集合操作(如过滤统计)、函数式接口的自定义实现、Optional类的空值安全处理、接口默认方法与静态方法的扩展能力,以及Java 9模块化系统的组件管理。每个特性均配有典型应用场景和代码示例,如使用Stream统计字符串长度、Optional处理Map取值、模块化项目的依赖声明等,帮助开发者掌握现代Java的高效编程范式。(150字)
109 1
|
7月前
|
Java 编译器 API
Java Lambda 表达式:以 Foo 接口为例深入解析
本文深入解析了 Java 8 中 Lambda 表达式的用法及其背后的函数式接口原理,以 `Foo` 接口为例,展示了如何通过简洁的 Lambda 表达式替代传统匿名类实现。文章从 Lambda 基本语法、函数式接口定义到实际应用层层递进,并探讨默认方法与静态方法的扩展性,最后总结常见误区与关键点,助你高效优化代码!
170 0
|
7月前
|
缓存 监控 Java
深入解析java正则表达式
本文深入解析Java正则表达式的应用,从基础概念到实际开发技巧全面展开。正则表达式是一种强大的文本处理工具,广泛应用于格式验证、搜索替换等场景。Java通过`Pattern`和`Matcher`类支持正则表达式,`Pattern.compile()`方法将正则字符串编译为高效模式对象。文章详细介绍了核心类的功能、常用正则语法及实际案例(如邮箱和电话号码验证)。掌握这些内容,可显著提升文本处理能力,满足多种开发需求。
241 1