java中lambda表达式的具体用法

Source

Lamda表达式

  • λ 希腊字母表中排序第十一位字母,英语名称为Lambda

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

  • 其实质属于函数式 编程的概念

  • (params)->expression[表达式]

  • (params)->statement[语句]

  • (params)->{statements}

  • (a-> System.out.print(“i like lambda–>”+a));

  • new Thread (()->System.out.println(“多线程学习。。。。”)).start();

  • 为什么要使用lambda表达式

    • 避免匿名内部类定义过多
    • 可以让你的代码看起来很简洁
    • 去掉了一堆没有意义的代码,只留下核心的逻辑。
  • 也许你会说,我看了Lambda表达式,不但不觉得简洁,反而觉得更乱,看不懂了。那是因为我们还没有习惯,用的多了,看习惯了就好了。

本章重点

  • 理解Functionl Interface(函数式接口)是学习java8 lambda表达式的关键所在
  • 函数接口的定义
    • 任何接口,如果只包含唯一一个抽象方法,那么他就是一个函数式接口
    • 对于函数式接口,我们可以通过lambda式来创建该接口的对象。

实例代码

  • 静态内部类,局部内部类,匿名内部类与lambda表达式

  • public class TestLambda1 {
          
            
        //静态内部类
        static class like2 implements ilike{
          
            
            @Override
            public void lambda() {
          
            
                System.out.println("i like lambda2");
            }
        }
    
    
    
    
        public static void main(String[] args) {
          
            
            ilike i=new like();
            i.lambda();
            i=new like2();
            i.lambda();
            //局部内部类
            class like3 implements ilike{
          
            
                @Override
                public void lambda() {
          
            
                    System.out.println("i like lambda3");
                }
    
            }
            i=new like3();
            i.lambda();
    
            //匿名内部类,没有类的名称,必须借助接口或者夫类
            i=new ilike() {
          
            
                @Override
                public void lambda() {
          
            
                    System.out.println("i like lambda4");
                }
            };
            i.lambda();
    
    
            //用lambda简化
            i =()-> {
          
            
                System.out.println("i like lambda5");
            };
            i.lambda();
    
    
    
    
        }
    }
    //定义一个函数式接口
    interface ilike{
          
            
        void lambda();
    }
    //实现接口
    class like implements ilike{
          
            
        @Override
        public void lambda() {
          
            
            System.out.println("i like lambda");
        }
    }
    
    
  • lambda表达式:

  • public class TestLambda2 {
          
            
    
        public static void main(String[] args) {
          
            
            Ilove love=null;
    
    
            //2.lamda表示简化
    //        Ilove love=(int a)->{
          
            
    //                System.out.println("i love you-->"+a);
    //
    //        };
    //        //简化1.去掉参数类型
    //        love =(a)->{
          
            
    //            System.out.println("i love you-->"+a);
    //
    //        };
            //简化2 简化括号
            love =a->{
          
            
                System.out.println("i love you-->"+a);
            };
            //简化3 去掉花括号
            love =a-> System.out.println("i love -->"+a);
            //总结
            //lambda表达式只能有一行代码的情况下才能简化成为一行,如果又多行就携程代码块
            //前提是接口为函数式(接口中只有一个方法位函数方法)
            //多个参数也可以去掉参数类型,要去掉都去掉,必须加上括号
    
    
    
            love.love(2);
        }
    
    }
    interface Ilove{
          
            
        void love(int a);
    }