lambda表达式(看完这一篇就清楚啦)

一、前言 

二、lambda表达式优点

三、lambda表达式缺点

四、lambda语法

1.代码:

2.执行结果:

3.语法注意事项:

五、lambda表达式和函数式接口

六、函数式接口

 1.变量捕获

2.lambda用法

map.foreach()

list排序

list查找过滤

七、总结


一、前言 

1.lambda表达式是JDK1.8中的一个重要特性,lambda表达式允许你通过表达式来代替功能接口(通过表达式实现业务功能),lambda表达式可以看做一个匿名函数。实际上就是为了让你的代码变得更加的简洁美观。

二、lambda表达式优点

  • 提供了更简单的语法和写代码的方式
  • 取代了匿名内部类
  • 简化代码,干净整洁
  • 方便了函数式编程
  • 增强了集合的操作

三、lambda表达式缺点

  • 代码可读性变差
  • 不容易进行调试

四、lambda语法

(参数列表)->{业务代码实现....}  箭头的意思可以通俗的理解为被用于的意思。不可以省略。

1.代码:

package thread.enumandlambda;

import java.util.Arrays;
import java.util.List;

/**
 * @Author: wenjingyuan
 * @Date: 2022/10/29/20:40
 * @Description:
 */
public class LambdaTest {
    public static void main(String[] args) {
      List list= Arrays.asList("java","mysql","lambda","spring");
      //传统的打印方法
        for(String item:list){
            System.out.println(item);
        }
        System.out.println();
        //学完lambda之后
        list.forEach((item)->{
            System.out.println(item);
        });
    }
}

2.执行结果:

lambda表达式(看完这一篇就清楚啦)_第1张图片

3.语法注意事项:

  • 如果参数值有一个参数,那么括号可以省略
  • 方法体中只有一行代码,则大括号可以省略
  • 方法体中只有一行语句,并且是return语句,那么大括号包括return都可以省略

五、lambda表达式和函数式接口

下面是一些lambda表达式的举例:

// 1. 不需要参数,返回值为 2

() -> 2
// 2. 接收⼀个参数 ( 数字类型 ), 返回其 2 倍的值
x -> 2 * x
// 3. 接受 2 个参数 ( 数字 ), 并返回他们的和
( x , y ) -> x + y
// 4. 接收 2 int 型整数 , 返回他们的乘积
(int x , int y ) -> x * y
// 5. 接受⼀个 string 对象 , 并在控制台打印 , 不返回任何值 ( 看起来像是返回 void)
(String s ) -> System . out . print ( s )
Lambda 表达式不能直接使⽤。
Lambda 表达式不能直接使⽤,它在使⽤之前必须初始化,lambda 表达式必须借助函数式接⼝
(@FunctionalInterface)来初始化

六、函数式接口

1.定义:⼀个接⼝有且只有⼀个抽象⽅法。
2.如果一个接口有且只有一个抽象方法,那么你可以将他理解为函数式接口,函数式接口可以用 @FunctionalInterface来检查。理论上来说,只要你的接口中存在一个抽象方法,都算是函数式接口。
2.举例说明:
lambda表达式(看完这一篇就清楚啦)_第2张图片

 lambda表达式(看完这一篇就清楚啦)_第3张图片

 1.变量捕获

lambda表达式在使用外部的变量时,必须要保证在使用之前变量不会更改。使用的时候就是在大括号里不能更改变量的值。如果变量用final修饰更能保证他不被修改,在修改的时候就会报错,如果不使用final修饰,在lambda表达式的时候就会报错。

2.lambda用法

  • map.foreach()

lambda表达式(看完这一篇就清楚啦)_第4张图片

  • list排序

package thread.enumandlambda;

import java.util.*;

/**
 * @Author: wenjingyuan
 * @Date: 2022/10/29/20:40
 * @Description:
 */
public class LambdaTest {
    public static void main(String[] args) {
        //printTest();
        // interFaceTest();
       //  mapTest();
        //创建并初始化list
        List list=Arrays.asList(5,3,6,8,2);
        System.out.println("排序前"+list);
        list.sort(new Comparator() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;
            }
        });
        System.out.println("排序后"+list);

    }

    private static void printTest() {
        List list= Arrays.asList("java","mysql","lambda","spring");
        //传统的打印方法
        for(String item:list){
            System.out.println(item);
        }
        System.out.println();
        //学完lambda之后
        list.forEach((item)->{
            System.out.println(item);
        });
    }

    private static void mapTest() {
        HashMap map=new HashMap(){{
            put("java","java value");
            put("mysql","mysql value");
        }};
        //jdk 1.8之前
        for(Map.Entry item:map.entrySet()){
            System.out.println(item.getKey()+":"+item.getValue());
        }
        //lambda
        map.forEach((k,v)->{
            System.out.println(k+":"+v);
        });
    }

    /**
     * 函数式接口实例
     */
    private static void interFaceTest() {
        MyFunctionalInterface myFunctionalInterface=(o)->{
            for(Object item: o){
                System.out.println(item);
            }
        };
        myFunctionalInterface.myMethod("java","Mysql");
    }
}
  • list查找过滤

private static void distinctTest() {
        List list=Arrays.asList("java","lambda","mysql","spring","lambda","springBoot");
        //jdk1.8之前
        for(String item:list){
            if(item.equals("lambda")){
                System.out.println("");
            }
        }
        //lambda之后
        List finds=list.stream().filter(
                s->s.equals("lambda")).collect(Collectors.toList());
        System.out.println(finds);
    }

七、总结

最后我想说,自律即是自由!希望大家在最后都有一个不错的收获!今天还听到一个很有意思的话想分享给自己和大家,用我自己的话总结一下,最终能够在这个世界生存留下来的人,不是最聪明的,也不是最厉害的,是适应能力最强的人!

你可能感兴趣的:(Java语言基础知识,java,spring,mybatis)