• Lambda表达式


    什么是lambda表达式?Lambda表达式,也可以称为闭包,它是推动Java8发布的最重要的新特新;其实呢,lambda表达式实质上是一个匿名方法,但该方法并非独立执行,而是用于实现函数式接口定义的唯一抽象方法,在使用lambda表达式时,会创建一个实现了函数式接口的一个匿名类实例,可以将lambda表达式视为一个对象,可以将其作为参数传递;

    为什么要使用lambda表达式?

    • 可以避免匿名内部类定义过多

    • 可以让你的代码看起来很简洁

    • 去掉了一堆没有意义的代码,只留下核心的逻辑

    何为函数式接口?

    • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数时接口,例如:线程中的Runnable接口

    • 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。

    下面来推导一下lambda表达式;

    package com.hp.lambda;
     ​
     /**
      * @author: 金州拉文
      * @date 2021/1/27 11:53
      **/
     //lambda表达式推导
     public class TestLambda1 {
         //3.静态外部类
         static class Like2 implements ILike{
             @Override
             public void lambda() {
                 System.out.println("i like lambda-->2");
             }
         }
         public static void main(String[] args) {
             ILike like = new Like();
             like.lambda();
             like = new Like2();
             like.lambda();
             
             //4.局部内部类
             class Like3 implements ILike{
                 @Override
                 public void lambda() {
                     System.out.println("i like lambda-->3");
                 }
             }
             like = new Like3();
             like.lambda();
     ​
             //5,匿名内部类,没有类的名称,必须借助接口或者父类
             like = new ILike(){
                 @Override
                 public void lambda() {
                     System.out.println("i like lambda-->4");
                 }
             };
             like.lambda();
             //6.lambda简化
             like=()->{
                 System.out.println("i like lambda-->5");
             };
             like.lambda();
         }
     }
     //1.定义一个函数式接口
     interface ILike{
         void lambda();
     }
     //2.实现类
     class Like implements ILike{
         @Override
         public void lambda() {
             System.out.println("i like lambda-->1");
         }
     }

    运行结果:

    下面来简化一下lambda表达式

     package com.hp.lambda;
     ​
     /**
      * @author: 金州拉文
      * @date 2021/1/27 12:11
      **/
     //lambda表达式简化
     public class TestLambda2 {
         public static void main(String[] args) {
             //1.lambda表达式简化
             ILove love=(int a)->{
                 System.out.println("i love you-->"+a);
             };
             love.lambda(1);
             //2.简化参数
             love=(a)->{
                 System.out.println("i love you-->"+a);
             };
             love.lambda(2);
             //3.简化括号
             love=a -> {
                 System.out.println("i love you-->"+a);
                 System.out.println("i love you-->too");
             };
             love.lambda(3);
             //4.去掉花括号
             love=a -> System.out.println("i love you-->"+a);
             love.lambda(4);
             /*
             * love=(a,b) -> System.out.println("i love you-->"+a+b);
             love.lambda(4,4);*/
         }
     }
     interface ILove{
         void lambda(int a);
         //void lambda(int a,int b);
     }
     class Love implements ILove{
         @Override
         public void lambda(int a) {
             System.out.println("i love you-->"+a);
         }
     }

    运行结果:

    总结:

    • lambda表达式只能由一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹

    • 前提是接口为函数式接口

    • 多个参数也可以去掉参数类型,但是要统一,如果去掉就都去掉,必须要加上括号

    胖子哈登
  • 相关阅读:
    Java泛型类和泛型方法
    Java泛型解析
    Reflection and array
    再叙Java反射
    Java Reflection(getXXX和getDeclaredXXX)
    Java反射(Reflection)
    MySQL Block Nested Loop and Batched Key Access Joins(块嵌套循环和批量Key访问连接)
    jQuery学习之jQuery Ajax用法详解
    request和request.form和request.querystring的区别
    浏览器中event.srcElement和event.target的兼容性问题
  • 原文地址:https://www.cnblogs.com/Nick62/p/14339858.html
Copyright © 2020-2023  润新知