zoukankan      html  css  js  c++  java
  • Java ----- Lambda表达式

    Lambda  是希腊字母表中排名第十一位的 (λ )的英文名称Lambda

    lambda表达式的重要特征:

      可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
      可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
      可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
      可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

    好处:避免内部类定义过多,去掉了没有意义的代码,只留下了核心逻辑,使代码看起来更加简洁,

    函数式接口的定义:任何接口如果只包含唯一一个抽象方法,那么它就是一个函数式接口,

    //函数式接口 :只有一个抽象方法
    public interface Runnable{
      public abstract void run();  
    }

    使用场景:对于函数式接口可以使用Lambda表达式来创建该接口对象

    Lambda表达式:属于函数式编程,与在es6 中的  借助箭头函数简化函数的书写方法基本一致

    箭头函数小例子:

    Lambda简单小例子:



    //
    一个简单的匿名函数 public class LambdaTest { public static void main(String[] args) { //匿名函数 ILambdaTest iNiming= new ILambdaTest() { @Override public void addLambda(String name, int age) { // TODO Auto-generated method stub System.out.println("我叫"+name+",今年"+age+"岁了"); } }; iNiming.addLambda("匿名类", 18); } //函数式接口,只有一个抽象方法 interface ILambdaTest{ abstract void addLambda(String name,int age); } //使用lambda 简化 //lambda 表达式 ILambdaTest iLambda = (String name,int age)->{ System.out.println("我叫"+name+",今年"+age+"岁了"); }; iLambda.addLambda("lambda", 8); } //也可以不写参数类型,不过要不写都不写 //lambda 表达式 ILambdaTest iLambda1 = (name, age)->{ System.out.println("我叫"+name+",今年"+age+"岁了"); }; iLambda1.addLambda("lambda", 8); //当只有一行代码时也可以不写大括号 //lambda 表达式 ILambdaTest iLambda1 = (name, age)->System.out.println("我叫"+name+",今年"+age+"岁了");; iLambda1.addLambda("lambda", 8);

    运行一下

    在多线程中的使用

    new Thread(()->System.out.println("静态代理在线程中使用")).start();

     Lambda 的推导:一般实现,静态内部类,局部内部类,匿名类,lambad 表达式

    lambad 表达式可以简化匿名类

    package com.obge.threadstu;
    
    public class LambdaStu {
        //2.使用静态内部类,实现接口
        static class ImpLambda2 implements  ILambda{
            @Override
            public void iMethod() {
                System.out.println("第二种实现接口方式,使用静态内部类");
            }
        }
    
        public static void main(String[] args) {
    
            //one、在另一个类中调用接口实现类的一般方式
            ImpLambda impLambda = new ImpLambda();
            impLambda.iMethod();
    
    
            //two、调用静态内部类
            ImpLambda2 impLambda2 = new ImpLambda2();
            impLambda2.iMethod();
    
            //3、在局部内部类中,实现接口
            class ImpLambda3 implements  ILambda{
                @Override
                public void iMethod() {
                    System.out.println("第三种实现接口方式,使用局部内部类");
                }
            }
            //three、调用局部内部类
            ImpLambda3 impLambda3 = new ImpLambda3();
            impLambda3.iMethod();
    
            //4、使用匿名内部类(没有类名称,必须借助接口或父类)
           ILambda iLambda1 = new ILambda(){
                @Override
                public void iMethod() {
                    System.out.println("第四种实现接口方式,使用匿名内部类");
                }
            };
    
            //four、调用匿名内部类
            iLambda1.iMethod();
    
    
            //5、lambda 简化匿名内部类
            ILambda iLambda2 = () ->System.out.println("第五种实现接口方式,使用lambda 表达式");
            //five、调用lambda 表达式
            iLambda2.iMethod();
        }
    
    }
    
    
    //函数式接口
    interface ILambda{
        void iMethod();
    }
    
    
    //实现类
    class ImpLambda implements  ILambda{
    
        @Override
        public void iMethod() {
            System.out.println("第一种实现接口方式");
        }
    }
  • 相关阅读:
    SAP CRM One Order函数CRM_Object_FILL_OW的设计原理
    SAP CRM One Order函数CHANGE_OW的设计原理
    SAP CRM One Order函数SAVE_EC的设计原理
    POJ-1125 Stockbroker Grapevine
    GStreamer 1.0 series序列示例
    H265与ffmpeg改进开发
    FFmpeg扩展开发
    在Yolov5 Yolov4 Yolov3 TensorRT 实现Implementation
    TensorRT 基于Yolov3的开发
    大规模数据处理Apache Spark开发
  • 原文地址:https://www.cnblogs.com/obge/p/14304769.html
Copyright © 2011-2022 走看看