Lambda表达式

344 阅读2分钟

今天说一下lambda表达式,说的不好还请指正,感谢.


1.Lambda表达式

为了防止过多没有本身作用,就只是为了重写一些抽象方法的类出现,我们可以把一个类定义为匿名内部类.

假若接口是一个函数式接口,也就是接口中只有一个方法的接口,我们这个时候可以使用lambda表达式简化匿名内部类.

先写一个匿名内部类

示例1:

public class Test {
    public static void main(String[] args) {
	    User u = new User() {
		    @Override
		    public void say() {
			System.out.println("哈哈哈");
	    	}
	    };
    	u.say();
    }
}
     interface User {
         void say();
    }

因为示例1中的接口是一个函数式接口,所以我们就可以对匿名内部类进行改写

改写如下:

    public class Test {
        public static void main(String[] args) {
        	User u = () -> {System.out.println("哈哈哈");};//lambda表达式
	        u.say();
        }
    }

        interface User {
        	void say();
        }

这是lambda表达式的第一种写法

lambda的基本语法为:

    ()->{}
    ():匹配要重写的抽象方法的参数列表
    ->:lambda符号,箭头符号,具有上下文推导的作用
    {}:匹配要重写的抽象方法的方法体

lambda表达式还有其他种写法:

  1. 当{}中的语句体只有一句的时候,前后{}可以省略

    public class Test {
         public static void main(String[] args) {
         	User u = () -> System.out.println("哈哈哈");//lambda表达式
             u.say();
         }
     }
    
         interface User {
         	void say();
         }
    
  2. 当接口中声明的方法中有参数时,lambda表达式中的()中的数据类型可以省略

     public class Test {
     public static void main(String[] args) {
     User u = (a,b) -> System.out.println(a+b);//lambda表达式
     
     u.say(3,4);
     }
     }
    
     interface User {
     void say(int a,int b);
      }
    
  3. 当接口中声明的方法中有参数且参数为一个是时,lambda表达式中的()可以省略

     public class Test {
     public static void main(String[] args) {
     User u = a -> System.out.println(a);//lambda表达式
     
     u.say(7);
     }
     }
    
     interface User {
     	void say(int a);
     }
    
  4. {}中的语句只有一句,并且是return 返回值的语句,前后的{}+return关键字都可以省略

     public class Test {
     public static void main(String[] args) {
     User u = b -> b;//lambda表达式
     System.out.println(u.say(7));
     }
      }
    
     interface User {
     	int  say(int a);
     }