在一个已经存在的编程语言里很少有对现有的生态系统起重大影响的新特性。Lambda表达式对于Java语言就是这种意义的存在。简单来说,Lambda表达式提供了便利的方式去创建一个匿名的功能。提供了一个简单的方式使用表达式或一系列的状态创建一个简单方法。Lambda表达式是包含一个抽象方法的接口。Lamdba表达式可以用来创建简单的匿名功能来实现对集合元素的排序和过滤,还能分配变量并传递到其他对象中。等等。下面将结合例子来加深大家对Lamdba的理解。
首先讲一下安装配置 要想使用Lamdba,需要安装jdk1.8 你可以到官网下载 至于环境变量配置 参考本人其他的博客 or baidu|google.
(鉴于本人是小菜鸟所以使用IDE而非记事本),Eclipse 版本 为 kepler 可以搜索eclipse kepler 下载
以上两步都完成 启动Eclipse 安装eclipse支持编译java8的插件
安装完毕重启后 开始lamdba之旅 ^_^
先来一个简单的例子
新建项目 java8 包名 java.lamdba
废话少说 上代码
001
public class HelloLambda {
public interface HelloType{
void hello(String text);
}
public static void main(String[] args) {
HelloType helloLambda = (String text) -> {System.out.println("Hello " + text);};
helloLambda.hello("Lambda");
}
}
(argument list) -> { body }
对一个lamdba表达式,参数列表可以包含0+个参数。如果没有参数,那么只使用一对空的括号。如果只有1个参数,可以不必使用括号。每个参数的类型指定都是可选的。如果没有指定类型,则从上下文中推断。body里如果有1+行,用大括号包围起来。
001 定义了一个接口 接口声明了一个方法 Main里写了接口的lamdba实现 根据 ( argument list ) -> {body} ; 传递一个参数 声明或不声明类型 ( text ) 方法体里打印"Hello" + text;然后调用hello并传值 结果打印 Hello Lamdba。
上代码 002
public class ActionCodeExample {
interface ActionCode{
int returnCode(String codestr);
}
public static void main(String[] args) {
/**
* A lambda expression can contain any statement that an ordinary Java
* method contains. However, the continue and break keywords are illegal
* at the top level.
*/
ActionCode code = (codestr) -> {
switch (codestr) {
case "ACTIVE": return 0;
case "INACTIVE": return 1;
default:
return -1;
}
};
System.out.println(code.returnCode("ACTIVE"));
}
}
写一些自定义的接口然后用Lamdba表达式来实现。所有的Lamdba表达式都实现了一个功能接口[只有一个抽象方法的接口]。
上代码003
public class ReverseTypeExample {
interface ReverseType {
String reverse(String text);
}
public static void main(String[] args) {
ReverseType newText = (testText) -> {
String tempStr = "";
for (String part : testText.split(" ")) {
tempStr = new StringBuilder(part).reverse().toString();
}
return tempStr;
};
System.out.println(newText.reverse("HELLO"));
}
}
003中功能接口包含了一个抽象方法的定义String reverse(String text),Main使用lamdba表达式实现了ReverseType,然后打印出返回值 OLLEH 。
除了使用上述方法外,我们还能使用在java.util.function包下的类去实现lamdba表达式,004将用Function
import java.util.function.Function;
public class FunctionExample {
public static void main(String[] args) {
/**
* accepts a string argument and returns a string result
*/
Function newText = (testText) -> {
String tempStr = "";
for(String part : testText.split(" ")){
tempStr = new StringBuilder(part).reverse().toString();
}
return tempStr;
};
System.out.println(newText.apply("WORLD"));
}
}
看了这些例子,可能会想到如果每需要一种功能,就要自己写实现。java为我们预提供了很多功能如图所示
使用java.util.function包下的的功能接口可以极大的减少你要编写的代码,并提高代码的性能。
下篇文章我们将使用lamdba表达式讲一下简单的排序,本篇就到这了。
ps:本文示例引自 Josh Juneau所著 Java 8 Recipes, 2nd Edition
mission completed!
O(∩_∩)O~