Java8已经出来有一段时间了,却一直没有来得及去看看他有些什么新奇的东西。最近无意之中看到之前自己收藏的一本书《Java 8 in Action》,感觉写得不错,给大家推荐一下,示例比较多,需要的同学可以下载,已经上传到CSDN:http://download.csdn.net/detail/qq_26718271/9754904。
今天先看看Lambda 表达式的简单使用:
首先:Lambda表达式的基本语法:(parameters) -> expression或(请注意语句的花括号)
(parameters) -> { statements; }
第一感觉就是这个箭头感觉有点怪,不过多用几次习惯就好,它主要是为了把参数列表与Lambda主体分隔开,箭头左边的是参数列表,右边的是Lambda主体。注意:Lambda表达式可以包含多行语句。
在用Lambda 之前,我们先看看之前写比较器的写法
Comparator byName = new Comparator() {
@Override
public int compare(Developer o1, Developer o2) {
return o1.getName().compareTo(o2.getName());
}
};
感觉也不是很复杂,没几行代码,再来看看Lambda 表达式的写法:
Comparator byName =
(Developer o1, Developer o2)->o1.getName().compareTo(o2.getName());
比之前要简单许多有木有。
下面再来看看排序功能示例:
先用Collections.sort如下:
public class TestSorting {
public static void main(String[] args) {
List listDevs = getDevelopers();
System.out.println("Before Sort");
for (Developer developer : listDevs) {
System.out.println(developer);
}
//安装年龄排序
Collections.sort(listDevs, new Comparator() {
@Override
public int compare(Developer o1, Developer o2) {
return o1.getAge() - o2.getAge();
}
});
System.out.println("After Sort");
for (Developer developer : listDevs) {
System.out.println(developer);
}
}
private static List getDevelopers() {
List result = new ArrayList();
result.add(new Developer("mkyong", new BigDecimal("70000"), 33));
result.add(new Developer("alvin", new BigDecimal("80000"), 20));
result.add(new Developer("jason", new BigDecimal("100000"), 10));
result.add(new Developer("iris", new BigDecimal("170000"), 55));
return result;
}
}
输出结果:
Before Sort
Developer [name=mkyong, salary=70000, age=33]
Developer [name=alvin, salary=80000, age=20]
Developer [name=jason, salary=100000, age=10]
Developer [name=iris, salary=170000, age=55]
After Sort
Developer [name=jason, salary=100000, age=10]
Developer [name=alvin, salary=80000, age=20]
Developer [name=mkyong, salary=70000, age=33]
Developer [name=iris, salary=170000, age=55]
看起来整个流程完全没毛病,下面再来看看Lambda的方式:
public class TestSorting {
public static void main(String[] args) {
List listDevs = getDevelopers();
System.out.println("Before Sort");
for (Developer developer : listDevs) {
System.out.println(developer);
}
System.out.println("After Sort");
//对比上面的代码
listDevs.sort((Developer o1, Developer o2)->o1.getAge()-o2.getAge());
//这样打印感觉也不错
listDevs.forEach((developer)->System.out.println(developer));
}
private static List<Developer> getDevelopers() {
List<Developer> result = new ArrayList<Developer>();
result.add(new Developer("mkyong", new BigDecimal("70000"), 33));
result.add(new Developer("alvin", new BigDecimal("80000"), 20));
result.add(new Developer("jason", new BigDecimal("100000"), 10));
result.add(new Developer("iris", new BigDecimal("170000"), 55));
return result;
}
}
输出结果:
Before Sort
Developer [name=mkyong, salary=70000, age=33]
Developer [name=alvin, salary=80000, age=20]
Developer [name=jason, salary=100000, age=10]
Developer [name=iris, salary=170000, age=55]
After Sort
Developer [name=jason, salary=100000, age=10]
Developer [name=alvin, salary=80000, age=20]
Developer [name=mkyong, salary=70000, age=33]
Developer [name=iris, salary=170000, age=55]
总体来说,写法与之前有较大的改变,写的代码更少,更简便,感觉还不错。
后续会带来更多有关Java8相关的东西,毕竟作为一只程序狗,得不停的学习才能不被淘汰。Java语言都在不停的改进更新,我们有啥理由不跟上节奏呢?
由于时间问题这里只是一个简单的应用,想了解更多可到官网查找相关示例。