• Lamda表达式


    简化代码,避免匿名内部类定义过多

    学习Lamda表达式的关键在于理解Functional Interface(函数式接口)

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

                                       public interface Runnable {

                                                   public abstract void run();

                                       }

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

    package com.wang.lamda;

    public class LamdaDemo01 {
       //3、静态内部类
       //把实现类写成静态内部类
       static class Like2 implements ILike{

           @Override
           public void Lambda() {
               System.out.println("i like lambda2");
          }
      }
       public static void main(String[] args) {
           //接口new实现类
           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 lambda3");
              }
          }
           like=new Like3();
           like.Lambda();

        //5、匿名内部类,没有类的名称,必须借助接口或父类
            like=new ILike() {
                @Override
                public void Lambda() {
                    System.out.println("i like lambda4");
                }
            };
            like.Lambda();
        //6、用lambda简化
           like=()-> {System.out.println("i like lambda5");};
           like.Lambda();
      }
    }
    //1、定义一个函数式接口
    interface ILike{
       //只要在接口里面,自动就是抽象的,不需要写出来
       void Lambda();
    }
    //2、实现类
    class Like implements ILike{

       @Override
       public void Lambda() {
           System.out.println("i like lambda");
      }
    }
    package com.wang.lamda;

    public class LambdaDemo {
       //4、外部类放到内部 静态内部类
       static class Love2 implements ILove{
           @Override
           public void love(int a) {
               System.out.println("i love you "+a);
          }
      }
       //main方法
       public static void main(String[] args) {
           ILove love=new Love();
           love.love(1);

           love=new Love2();
           love.love(2);

       //5、局部内部类
       class Love3 implements ILove{
        @Override
               public void love(int a) {
                   System.out.println("i love you "+a);
          }
      }

           love=new Love3();
           love.love(3);

        //6、匿名内部类
           love=new ILove() {
               @Override
               public void love(int a) {
                   System.out.println("i love you "+a);
              }
          };
           love.love(4);

        //7、Lambda表达式简化 方法中有参数
           love=(int a)->{ System.out.println("i love you "+a); };
           love.love(5);
           //7.1 简化Lambda
           love=a -> {
               System.out.println("i love you "+a);
          };
           love.love(6);
           //7.2
           love=a -> System.out.println("i love you "+a);
           love.love(7);
           
      }
    }
    //1、定义接口
    interface ILove{
       //2、写方法,接口中是抽象方法,不用写abstract
       void love(int a);
    }
    //3、实现类
    class Love implements ILove{

       @Override
       public void love(int a) {
           System.out.println("i love you "+a);
      }
    }

      总结

    Lambda表达式:

    只有一行代码的情况下才能去掉花括号,只剩下一行
    多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号
    前提是接口是函数式接口

  • 相关阅读:
    Codeforces Round #343 (Div. 2) B. Far Relative’s Problem 暴力
    Codeforces Round #343 (Div. 2) A. Far Relative’s Birthday Cake 水题
    Educational Codeforces Round 8 F. Bear and Fair Set 最大流
    Educational Codeforces Round 8 E. Zbazi in Zeydabad 树状数组
    Educational Codeforces Round 8 D. Magic Numbers 数位DP
    Educational Codeforces Round 8 C. Bear and String Distance 贪心
    Educational Codeforces Round 8 B. New Skateboard 暴力
    Educational Codeforces Round 8 A. Tennis Tournament 暴力
    BZOJ 4032: [HEOI2015]最短不公共子串 后缀自动机 暴力
    BZOJ 4031: [HEOI2015]小Z的房间 高斯消元 MartixTree定理 辗转相除法
  • 原文地址:https://www.cnblogs.com/wyj96/p/11979706.html
Copyright © 2020-2023  润新知