一直想学学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!!!