一直想学学JAVA8,感觉是JAVA重要的里程碑版本之一。lambda表达式只闻其名,还没有实际用过,这里写几个简单的demo
尝试一下。
1.函数式接口
package org.java;
/**
* @author: krauser
* @date: Create in 上午10:12 2018/1/9
* @Description:函数式接口 个注解是非必须的,只要接口符合函数式接口的标准(即只包含一个方法的接口)
* 虚拟机会自动判断,但最好在接口上使用注解@FunctionalInterface进行声明,
* 以免团队的其他人员错误地往接口中添加新的方法。
* <p>
* Java中的lambda无法单独出现,它需要一个函数式接口来盛放
* lambda表达式方法体其实就是函数接口的实现。
*/
@FunctionalInterface
public interface FunctionalInterfaceDemo {
/**
* 说指定内容
*
* @param message
* @return void
*/
String saySomething(String message);
}
2.lambda的初次尝试
package org.java;
/**
* @author: krauser
* @date: Create in 上午10:19 2018/1/9
* @Description: 包含三个部分
* 一个括号内用逗号分隔的形式参数,参数是函数式接口里面方法的参数
* 一个箭头符号:->
* 方法体,可以是表达式和代码块,方法体函数式接口里面方法的实现,
* 如果是代码块,则必须用{}来包裹起来,且需要一个return 返回值,
* 但有个例外,若函数式接口里面方法返回值是void,则无需{}
* 总体看起来像这样
* (parameters) -> expression 或者 (parameters) -> { statements; }
*/
public class LambdaDemo {
public static void main(String[] args) {
FunctionalInterfaceDemo functionalInterfaceDemo = (personName) -> {
System.out.println("Call:" + personName);
return personName;
};
functionalInterfaceDemo.saySomething("person");
}
}
3.引用方法
package org.java;
/**
* @author: krauser
* @date: Create in 上午10:45 2018/1/9
* @Description: 其实是lambda表达式的一个简化写法,所引用的方法其实是lambda表达式的方法体实现,语法也很简单,左边是容器(可以是类名,实例名),中间是"::",右边是相应的方法名。如下所示:
* <p>
* ObjectReference::methodName
* 一般方法的引用格式是
* <p>
* 如果是静态方法,则是ClassName::methodName。如 Object ::equals
* <p>
* 如果是实例方法,则是Instance::methodName。如Object obj=new Object();obj::equals;
* <p>
* 构造函数.则是ClassName::new
*/
public class MethodReferenceDemo {
public static void main(String[] args) {
FunctionalInterfaceDemo functionalInterfaceDemo = String::new;
String result = functionalInterfaceDemo.saySomething("test");
System.out.println(result);
}
}
看起来写几个demo很简单,但是在项目的实际运用中还是蛮困难的,尤其是引用方法,还不得其味。只能说在保证项目稳定的前提下,可以多试着用lambda写一些很简洁大气的代码。加油我的2018!!!