JAVA8新特性(Lambda表达式)

本文详细介绍了JAVA8中的Lambda表达式,包括其使用的前提条件和多种语法表现形式,如无参数、有参数、参数类型推断等具体用法,并通过Runnable、DAO和Comparator接口举例说明。
摘要由CSDN通过智能技术生成

###前言:

接上一篇 JAVA8新特性之(函数式接口):http://blog.csdn.net/xinghuo0007/article/details/78595720

###知识点零:Lambda表达式使用的前提

   Lambda语法使用的前提是函数式接口哦! 不要忘记了! 重要,重要,重要。。。

###知识点一:Lambda表达式语法

	前提必备:
	     1.java8新增了一个新的操作符 " -> ",该操作符成为箭头操作符或者成为Lambda操作符。箭头操作符将Lambda表达式分割成量部分
		
		左侧:Lambda表达式的参数列表
		右侧:Lambda表达式的功能体,即Lambda表达式的功能是现实体也成为Lambda体
	
	基础语法:(参数类型)-> Lambda体
	
    具体表现:
			(参数类型)-> Lambda表达式
		或者
			(参数类型)-> 代码块			

###知识点二:Lambda表达式语法的具体表现形式

   表现形式一:无参数,无返回值
            () ->Lambda体
		  例如:
		    ()->System.out.println("hello Lambda");

   表现形式二:有一个参数,无返回值
		   (x) - >  Lambda体    
		   例如:
		   (x) - > System.out.println(x);    
   表现形式三:若只有一个参数,小括号可以省略不写
		   x ->  Lambda体
		   例如:
		    x - > System.out.println(x);    	
   表现形式四:有两个或者两个以上的参数,有返回值,并且Lambda体有多条语句
		   (x,y) -> Lambda体
		    例如:
		   (x,y)- > {
		      System.out.println(x)
		      System.out.println(y)
		      return 返回值;	    
		   };  	 
   表现形式五:若Lambda体中只有一条语句,{} 和 返回值 可以省略

   表现形式六:Lambda表达式的参数列表可以不写数据类型,以为编译器能够通过上下文自动推断数据类型

      

###知识点二:Lambda表达式语法的具体表现形式

1.无参数,无返回值的情况。举例接口:Runnable

注意:
	这里并没有开启线程,只是单纯的调用Runnable的run方法	

        //传统方法
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("hello runnable !");
            }
        };
        runnable.run();// 打印:hello runnable !

        //Lambda表达式
        runnable = () -> System.out.println("hello Lambda!");
        runnable.run(); // 打印:hello Lambda!

2.有一个参数,无返回值。举例接口:自定义接口DAO

/**
 * 接口
 */
@FunctionalInterface
interface DAO<T> {

   void test(T t);

}

/**
 * 测试类
 */
public class Test {

    public static void main(String[] args) {

        DAO<String> dao = (s) -> System.out.println(s);
        dao.test("hello DAO !");//打印:hello DAO !
    }
}

3.若只有一个参数,小括号可以省略不写。 举例接口:自定义接口DAO

/**
 * 接口
 */
@FunctionalInterface
interface DAO<T> {

   void test(T t);

}

/**
 * 测试类
 */
public class Test {

    public static void main(String[] args) {

        DAO<String> dao = s -> System.out.println(s);
        dao.test("hello DAO !");//打印:hello DAO !
    }
}

4.有两个或者两个以上的参数,有返回值,并且Lambda体有多条语句。举例接口:Compartor

/**
 * 测试类
 */
public class Test {

    public static void main(String[] args) {
        Comparator<Integer> comparator = (x,y) -> {
            System.out.println("x =  "+ x);
            System.out.println("y =  "+ y);
            return Integer.compare(x,y);
        };

        int result = comparator.compare(10,20);
        System.out.println("result = "+ result); // result = -1 
    }
}

5 若Lambda体中只有一条语句,{} 和 返回值 可以省略; 举例接口:Compartor

/**
 * 测试类
 */
public class Test {

    public static void main(String[] args) {
        Comparator<Integer> comparator = (x,y) ->  Integer.compare(x,y);
        int result = comparator.compare(10,20);
        System.out.println("result = "+ result); // result = -1 
    }
}

6.Lambda表达式的参数列表可以不写数据类型,以为编译器能够通过上下文自动推断数据类型

	以上案例中,Lambda表达式的参数列表中都没有声明数据类型;
	值得一提的是,如果你非要声明类型的话,一定都要写,如有两个参数,你要写数据类型,必须两个参数都要写;如果只写一个的话,会编译报错;
	建议:都不写!

本人博客:https://elfgirl.top/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值