欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java中Lambda表达式基础及使用,

来源: javaer 分享于  点击 13481 次 点评:137

Java中Lambda表达式基础及使用,


目录
  • 一、举例说明
    • 1、无参无返回
      • 1.1 定义一个接口
      • 1.2接口实现类
      • 1.3 测试类
    • 2、有参无返回代码示例
      • 3、有参有返回
      • 二、简单事项
        • 1、省略模式
          • 2、注意事项
          • 三、Lambda表达式和匿名内部类的区别
            • 1、所需类型不同:
              • 2、使用限制不同:
                • 3、实现原理不同:

                标准格式:

                三要素:形式参数 箭头 代码块
                格式:(形式参数)->{代码块}
                形式参数:如果多个参数用逗号隔开,无参留空
                ->:英文中划线和大于号组成
                代码块:具体要做的事

                使用前提:

                有一个接口
                接口中有且仅有一个抽象方法

                一、举例说明

                1、无参无返回

                1.1 定义一个接口

                public interface Eatable {
                    void eat();
                }

                1.2接口实现类

                public class EatableImpl implements Eatable{
                    @Override
                    public void eat() {
                        System.out.println("一天一苹果");
                    }
                }

                1.3 测试类

                public class EatableDemo {
                    public static void main(String[] args) {
                        //主方法调用useEatable
                        Eatable e = new EatableImpl();
                        useEatable(e);
                        //匿名内部类
                        useEatable(new Eatable() {
                            @Override
                            public void eat() {
                                System.out.println("一天一苹果");
                            }
                        });
                
                        //lambda表达式
                        useEatable(() -> {
                            System.out.println("一天一苹果");
                        });
                
                 
                
                    }
                
                    private static void useEatable(Eatable e){
                        e.eat();
                    }
                }
                

                2、有参无返回代码示例

                public interface Eatable {
                    void eat(String name);
                }
                
                public class EatDemo {
                    public static void main(String[] args) {
                        useEat((String name) -> {
                            System.out.println(name);
                            System.out.println("输出的啥");
                        });
                    }
                
                    private static void useEat(Eatable e){
                        e.eat("苹果");
                    }
                
                }
                

                3、有参有返回

                public interface Addable {
                    int add(int x,int y);
                }
                1.
                2.
                3.
                public class AddableDemo {
                    public static void main(String[] args) {
                        useAddable( (int x,int y ) -> {
                            return x+y;
                        });
                    }
                
                    private static void useAddable(Addable a){
                        int sum = a.add(5, 7);
                        System.out.println(sum);
                    }
                
                }
                

                二、简单事项

                1、省略模式

                • 参数的类型可省略,多个参数时候不可只省略一个;
                • 如果参数有且仅有一个可省略大括号和分号;
                • 如果代码块的语句只有一条,可省略大括号和分号(有return时return也省略掉)

                2、注意事项

                • 必须要有接口,接口中有且仅有一个抽象方法
                • 必须有上下文环境,才能推导出Lambda对应的接口:局部变量的赋值、调用方法的参数

                三、Lambda表达式和匿名内部类的区别

                1、所需类型不同:

                • 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
                • Lambda表达式:只能是接口

                2、使用限制不同:

                • 如果接口中有且仅有一个抽象类,两者都可以使用
                • 接口中多于一个抽象类,只能使用匿名内部类

                3、实现原理不同:

                • 匿名内部类:编译之后,产生一个单独的.class字节码文件
                • Lambda表达式:编译之后,没有单独的.class字节码文件,对应的字节码会在运行时动态的生成

                到此这篇关于Java中Lambda表达式基础及使用的文章就介绍到这了,更多相关Java中Lambda表达式内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

                您可能感兴趣的文章:
                • Java中Lambda表达式的进化之路详解
                • java Lambda表达式的使用心得
                • Java中使用Lambda表达式和函数编程示例
                • 一文带你掌握Java8中Lambda表达式 函数式接口及方法构造器数组的引用
                • Java中Lambda表达式的使用详解
                • Java语法中Lambda表达式无法抛出异常的解决
                • 吊打Java面试官之Lambda表达式 Stream API
                • 深入理解Java8新特性之Lambda表达式的基本语法和自定义函数式接口
                相关栏目:

                用户点评