欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Lambda表达式的六种用法

程序员文章站 2024-01-07 22:12:04
文章目录为什么使用Lambda表达式Lambda表达式的本质使用Lambda表达式的条件语法格式代码举例总结为什么使用Lambda表达式   Lambda是–个匿名函数,我们可以把Lambda表达式理解为是–段可以传递的代码(将代码像数据一样进行传递) 。使用它可以写出更简洁、更灵活的代码。作为-种更紧凑的代码风格,使Java的语 言表达能力得到了提升。Lambda表达式的本质   作为接口的实例使用Lambda表达式的条件JDK版本必须1.8以上接口只能有一个方法语法格式(0...




为什么使用Lambda表达式

   Lambda是–个匿名函数,我们可以把Lambda表达式理解为是–段可以传递的代码(将代码像数据一样进行传递) 。使用它可以写出更简洁、更灵活的代码。作为-种更紧凑的代码风格,使Java的语 言表达能力得到了提升。

Lambda表达式的本质

   作为接口的实例

使用Lambda表达式的条件

  1. JDK版本必须1.8以上
  2. 接口只能有一个方法


语法格式

(01,02) ->Integer. compare(01,02);
-> :lambda操作符或箭头操作符
->左边: lambda形参列表(其实就是 接口中的抽象方法的形参列表)
->右边: Lambda体 (其实就是重写的抽象方法的方法体)



代码举例

package PackageTest01;

import java.net.SocketOption;
import java.util.Comparator;
import java.util.function.Consumer;

/**
 * LambdaTest表达式的使用
 * 共六种语法格式
 */
public class LambdaTest {

    public static void main(String[] args) {
        test5();
    }
    //语法格式一:无参,无返回值
    public static void test1(){
        Runnable r1 = new Runnable(){
            @Override
            public void run() {
                System.out.println("练习Lambda表达式的使用");
            }
        };
        r1.run();

        System.out.println("*************************");

        Runnable r2 = ()->System.out.println("练习Lambda表达式的使用2");
        r2.run();
    }

    //语法格式二:Lambda 需要一个参数,但是没有返回值
    public static void test2(){
        Consumer<String> con  = new Consumer<String>(){
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        con.accept("谎言和誓言的区别是什么?");

        Consumer<String> con2  = (String s)->{
                System.out.println(s);
        };
        con.accept("一个是听的人当真了,一个是说的人当真了");
    }

    //语法格式三:数据类型可以省略,因为可由编辑器推断出,称为“类型推断”
    public static void test3(){
        Consumer<String> con1  = (String s)->{
            System.out.println(s);
        };
        con1.accept("一个是听的人当真了,一个是说的人当真了");

        System.out.println("**********************");

        Consumer<String> con2  = (String s)->{
            System.out.println(s);
        };
        con2.accept("一个是听的人当真了,一个是说的人当真了");
    }

    //语法格式四:Lambda 如只需要一个参数时,参数的小括号可以省略
    public static void test4(){
        Consumer<String> con1  = (s)->{
            System.out.println(s);
        };
        con1.accept("一个是听的人当真了,一个是说的人当真了");

        Consumer<String> con2  = s->{
            System.out.println(s);
        };
        con2.accept("一个是听的人当真了,一个是说的人当真了");
    }

    //语法格式五:Lambda 需要两个或者两个以上的参数,多条执行语句,并且可以有返回值
    public static void test5(){

        Comparator<Integer> com1 = new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println(o1);
                System.out.println(o2);
                return o1.compareTo(o2);
            }
        };
        System.out.println(com1.compare(12,6));

        System.out.println("*********************");

        Comparator<Integer> com2 = (o1, o2)-> {
            System.out.println(o1);
            System.out.println(o2);
            return o1.compareTo(o2);
        };
        System.out.println(com2.compare(23, 56));
    }

    //语法格式六:当Lambda体只有一条语句时,return与大括号可以一起省略(省略大括号时,return关键字也必须省略)
    public static void test6(){

        Comparator<Integer> com1 = (o1, o2)-> {
            return o1.compareTo(o2);
        };
        System.out.println(com1.compare(23, 56));

        Comparator<Integer> com2 = (o1, o2)-> o1.compareTo(o2);
        System.out.println(com2.compare(23, 56));

    }
}


总结

  • ->左边: lambda形参列表的参数类型可以省略(类型推断);如果Lambda形参列表只有一一个参数,其括号可以省略。
  • ->右边: lambda体应该使用一对{} 包裹;如果Lambda体只有一条执行语句(可能是return语句),则可以将return关键字与大括号可以一起省略(省略大括号时,return关键字也必须省略)

本文地址:https://blog.csdn.net/HC199854/article/details/107671960

相关标签: Java学习