小工具知识网

当前位置: 首页 > 行业知识 > Lambda表达式详解

行业知识

Lambda表达式详解

2025-11-05 16:51:51 来源:互联网转载

Lambda表达式

      • 1. 为什么使用lambda表达式
      • 2. 入门案例
      • 3. lambda表达式组成
      • 4. lambda表达式使用
        • 4.1 语法格式一
        • 4.2 语法格式二
        • 4.3 语法格式三
        • 4.4 语法格式四
        • 4.5 语法格式五
        • 4.6 语法格式六
        • 5. ���结

          1. 为什么使用lambda表达式

          lambda是一个匿名函数,我们可以吧lambda表达式理解为是一段可以传递的代码。使用它可以写出更简洁,更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

          2. 入门案例

          先看一个简单的Java线程中的Runnable接口案例

          public void test01(){        Runnable ri = new Runnable() {            @Override            public void run() {                System.out.println("好好学习,天天向上");            }        };        ri.run();    }

          再看下使用了Lambda表达式的版本

           public void test02(){        Runnable r2 = ()-> System.out.println("学会lambda,快乐每一天");        r2.run();    }

          相信看到这里,对Lambda表达式的第一印象就是代码怎么这么短,这也就是lambda表达式的特性:简洁。

          再看一个案例,比较数的大小

          public void test03(){        Comparator comparator = new Comparator() {            @Override            public int compare(Integer o1, Integer o2) {                return Integer.compare(o1,o2);            }        };        int compare = comparator.compare(12, 21);        System.out.println(compare);    }

          因为12是小于21的,所以这里返回的是-1;我们再来看看对应的lambda表达式的写法

           public void test04(){        Comparator comparator = (o1,o2)-> Integer.compare(o1,o2);        int compare = comparator.compare(32,23);        System.out.println(compare);    }

          因为32大于23,所以返回值为1;

          3. lambda表达式组成

          形如以下:

          (o1,o2) -> Integer.compare(o1,o2)

          左边 -> 右边

          • -> 被称为lambda操作符或箭头操作符
          • 左边:lambda形参列表(其实就是接口中的抽象方法的形参列表)
          • 右边:lambda体 (其实就是重写的抽象方法的方法体)

            4. lambda表达式使用

            4.1 语法格式一

            无参无返回值

            public void test01(){        Runnable ri = new Runnable() {            @Override            public void run() {                System.out.println("好好学习,天天向上");            }        };        ri.run();    }
             public void test02(){        Runnable r2 = ()-> {System.out.println("学会lambda,快乐每一天");};        r2.run();    }
            4.2 语法格式二

            需要一个参数但无返回值

            public void test05(){        Consumer consumer = new Consumer() {            @Override            public void accept(String s) {                System.out.println(s);            }        };        consumer.accept("这一路上走走停停");    }
            public void test06(){        Consumer consumer = (String s)->{System.out.println(s);};        consumer.accept("留下少年漂流的痕迹");    }
            4.3 语法格式三

            数据类型可以省略,由编译器去推断出,称为“类型推断”

            public void test05(){        Consumer consumer = new Consumer() {            @Override            public void accept(String s) {                System.out.println(s);            }        };        consumer.accept("这一路上走走停停");    }
            public void test06(){        Consumer consumer = (s)->{System.out.println(s);};//类型推断        consumer.accept("留下少年漂流的痕迹");    }

            这里有些类似于使用集合类是前面指明过泛型后,后边不需要再次指明

            4.4 语法格式四

            lambda若只需要一个参数时,参数的小括号可以省略

            public void test05(){        Consumer consumer = new Consumer() {            @Override            public void accept(String s) {                System.out.println(s);            }        };        consumer.accept("这一路上走走停停");    }
            public void test06(){        Consumer consumer = s->{System.out.println(s);};//类型推断        consumer.accept("留下少年漂流的痕迹");    }
            4.5 语法格式五

            lambda需要两个或以上的参数,多条执行语句,并且可以有返回值

               public void test03(){        Comparator comparator = new Comparator() {            @Override            public int compare(Integer o1, Integer o2) {                System.out.println(o1);                System.out.println(02);                return Integer.compare(o1,o2);            }        };        int compare = comparator.compare(12, 21);        System.out.println(compare);    }
            public void test04(){     Comparator comparator = (o1,o2)-> {         System.out.println(o1);        System.out.println(02);        return Integer.compare(o1,o2);};    int compare = comparator.compare(32,23);    System.out.println(compare);}
            4.6 语法格式六

            当lambda体只有一条语句时,return与大括号若有,都可以省略

            public void test03(){        Comparator comparator = new Comparator() {            @Override            public int compare(Integer o1, Integer o2) {                return Integer.compare(o1,o2);            }        };        int compare = comparator.compare(12, 21);        System.out.println(compare);    }
             public void test04(){        Comparator comparator = (o1,o2)-> Integer.compare(o1,o2);        int compare = comparator.compare(32,23);        System.out.println(compare);    }

            5. 总结

            lambda接口的实质:作为函数式接口的实例,关键是这个匿名内部类的简化,省略。

上一篇:WordPress与Halo无缝对接指南,一站式实现高效互动连接!

下一篇:揭秘APP源码,深度解析与应用开发秘籍,掌握开发秘籍,轻松打造优质应用!