都2023年了,如果不会Lambda表达式、函数式编程?你确定能看懂公司代码?

简介: 都2023年了,如果你不会Lambda表达式、函数式编程?你确定能看懂公司代码? 那么建议来了解一下Lambda表达式, 因为它使用简单,易操作,易上手而代码简洁,开发快速,一看就令人很爽😎😎😎 . 其实Lambda表达式接近自然语言,易于理解 , 集万千优点与一身, 比匿名内部类更加完美👉👉👉.下面来简单认识一下今天的主角Lambda表达式吧

👳我亲爱的各位大佬们好😘😘😘
♨️本篇文章记录的为 Lambda表达式 相关内容,适合在学Java的小白,帮助新手快速上手,也适合复习中,面试中的大佬🙉🙉🙉。
♨️如果文章有什么需要改进的地方还请大佬不吝赐教❤️🧡💛
👨‍🔧 个人主页 : 阿千弟

都2023年了,如果你不会Lambda表达式、函数式编程?你确定能看懂公司代码? 那么建议来了解一下Lambda表达式, 因为它使用简单,易操作,易上手而代码简洁,开发快速,一看就令人很爽😎😎😎 .
其实Lambda表达式接近自然语言,易于理解 , 集万千优点与一身, 比匿名内部类更加完美👉👉👉.下面来简单认识一下今天的主角Lambda表达式吧

在这里插入图片描述

1.2 函数式编程思想

1.2.1 概念

面向对象思想需要关注用什么对象完成什么事情。而函数式编程思想就类似于我们数学中的函数。它主要关注的是对数据进行了什么操作。

1.2.2 优点

  • 代码简洁,开发快速
  • 接近自然语言,易于理解
  • 易于"并发编程"

2. Lambda表达式

2.1 概述

Lambda是JDK8中一个语法糖。他可以对某些匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现。让我们不用关注是什么对象。而是更关注我们对数据进行了什么操作。

2.2 核心原则

可推导可省略

2.3 基本格式

  • (参数列表)->{代码}
  • ()括号用来描述参数列表。
  • {}大括号用来描述方法体。
  • ->尖括号,Lambda运算符,可以叫做箭头符号,或者goes to。

2.4 使用场景

什么情况下使用lambda简化 :

如果这个匿名内部类是个接口,并且它当中只有一个抽象方法需要重写

lambda只关注你重写方法的参数列表以及方法体

在这里插入图片描述

例一

我们在创建线程并启动时可以使用匿名内部类的写法:

new Thread(new Runnable() {
   
   
    @Override
    public void run() {
   
   
        System.out.println("线程创建成功");
    }
}).start();

可以使用Lambda的格式对其进行修改。修改后如下:

new Thread(()->{
   
   
    System.out.println("线程创建成功");
}).start();

例二

现有方法定义如下,其中IntBinaryOperator是一个接口。先使用匿名内部类的写法调用该方法。

在这里插入图片描述

注意:

  • 如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口
  • 如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口,这样如果有两个抽象方法,程序编译就会报错的。
 public static int calculateNum(IntBinaryOperator operator){
   
   
        int a = 10;
        int b = 20;
        return operator.applyAsInt(a, b);
    }

    public static void main(String[] args) {
   
   
        int i = calculateNum(new IntBinaryOperator() {
   
   
            @Override
            public int applyAsInt(int left, int right) {
   
   
                return left + right;
            }
        });
        System.out.println(i);
    }

Lambda写法:

 public static int calculateNum(IntBinaryOperator operator){
   
   
        int a = 10;
        int b = 20;
        return operator.applyAsInt(a, b);
    }

  public static void main(String[] args) {
   
   
        int i = calculateNum((int left, int right)->{
   
   
            return left + right;
        });
           //甚至可以这样写, 后面会为什么
           int i = calculateNum((left, right) -> left + right);

        System.out.println(i);
    }

在这里插入图片描述

例三

现有方法定义如下,其中IntPredicate是一个接口。先使用匿名内部类的写法调用该方法。

    public static void main(String[] args) {
   
   
        printNum(new IntPredicate() {
   
   
            @Override
            public boolean test(int 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);
            }
        }
    }

Lambda写法:

public static void main(String[] args) {
   
   
        printNum((int 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);
            }
        }
    }

例四

现有方法定义如下,其中Function是一个接口。先使用匿名内部类的写法调用该方法。
在这里插入图片描述

Function<T, R>这个接口有点意思 , 它接收的泛型是<T, R>, 它只有一个抽象方法 R apply< T t >, 可以看出apply方法是接收T类型的参数, 转化为R类型并返回(T, R的类型任意, 前提是可以相互转化)

 public static <R> R typeConver(Function<String,R> function){
   
   
        String str = "1235";
        R result = function.apply(str);
        return result;
    }

    public static void main(String[] args) {
   
   
        Integer result = typeConver(new Function<String, Integer>() {
   
   
            @Override
            public Integer apply(String s) {
   
   
                return Integer.valueOf(s);
            }
        });
        System.out.println(result);
    }

Lambda写法:

public static <R> R typeConver(Function<String,R> function){
   
   
        String str = "1235";
        R result = function.apply(str);
        return result;
    }

    public static void main(String[] args) {
   
   
        Integer result = typeConver(s -> Integer.valueOf(s));
        System.out.println(result);
    }

省略的几种情况:

  • 可选类型声明 : 参数类型可以省略(编译器可以统一识别参数值)
    • 方法体只有一句代码时大括号return和唯一一句代码的分号可以省略
    • 方法只有一个参数时小括号可以省略
      在这里插入图片描述

如果这篇【文章】有帮助到你💖,希望可以给我点个赞👍,创作不易,如果有对Java后端或者对spring感兴趣的朋友,请多多关注💖💖💖
👨‍🔧 个人主页 : 阿千弟

目录
相关文章
|
21天前
|
Java 程序员 C#
Lambda表达式:简洁而强大的函数式编程利器
【4月更文挑战第3天】本文探讨了Lambda表达式的基础和在编程中的应用,包括简化代码和提高可读性。Lambda表达式是匿名函数,用于简单的功能,如示例中的平方运算和列表筛选。通过`map`、`filter`等函数,Lambda表达式能有效处理列表操作。文中还展示了Lambda表达式的高级用法,如闭包特性、异常处理及与高阶函数的结合。通过实例,读者可以学习如何利用Lambda表达式实现更高效、简洁的编程。
33 0
|
21天前
|
存储 安全 C++
【C++ 泛型编程 高级篇】C++可变参数模板探索:编程技巧与实战应用
【C++ 泛型编程 高级篇】C++可变参数模板探索:编程技巧与实战应用
120 0
|
21天前
|
设计模式 Java 程序员
为什么程序员喜欢用Lambda表达式?
“lambda 表达式”是一段可以传递的代码,因此它可以被执行一次或多次。在学习语法(甚至包括一些奇怪的术语)之前,我们先回顾一下之前在Java 中一直使用的相似的代码块。
27 0
|
21天前
|
分布式计算 Java API
谈谈代码:函数式编程
一个风和日丽的下午,我看着日常看代码做重构迁移,突然看到这么段代码...
55 1
|
10月前
|
并行计算 Java 编译器
教你精通Java语法之第十五章、Lambda表达式
Lambda表达式的优点很明显,在代码层次上来说,使代码变得非常的简洁。缺点也很明显,代码不易读。1. 代码简洁,开发迅速2. 方便函数式编程3. 非常容易进行并行计算4. Java 引入 Lambda,改善了集合操作1. 代码可读性变差2. 在非并行计算中,很多计算未必有传统的 for 性能要高3. 不容易进行调试。
34 0
|
10月前
|
机器学习/深度学习 自然语言处理 算法
程序员的炫技代码写法
程序员的炫技代码写法
|
11月前
|
SQL Java 数据库
Lambda表达式你到哪个境界了?
日常开发中,我们很多时候需要用到Java 8的Lambda表达式,它允许把函数作为一个方法的参数,让我们的代码更优雅、更简洁。所以整理了一波工作中,我常用的,有哪些Lambda表达式。看完一定会有帮助的。
|
安全 Java 测试技术
Kotlin刨根问底(二):for循环引起的一起“血案”(上)
本文灵感来源于:群友遍历列表时remove元素引发异常,后对for循环的实现原理进行一系列的探究~
425 0
|
设计模式 缓存 Java
Kotlin刨根问底(二):for循环引起的一起“血案”(中)
本文灵感来源于:群友遍历列表时remove元素引发异常,后对for循环的实现原理进行一系列的探究~
306 0
|
安全 Java Kotlin
Kotlin刨根问底(二):for循环引起的一起“血案”(下)
本文灵感来源于:群友遍历列表时remove元素引发异常,后对for循环的实现原理进行一系列的探究~
251 0

热门文章

最新文章