您的位置:首页 > 编程语言 > Java开发

Java8新特性之Lambda:比较器示例

2017-04-18 11:40 507 查看
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<Developer> byName = new Comparator<Developer>() {
@Override
public int compare(Developer o1, Developer o2) {
return o1.getName().compareTo(o2.getName());
}
};


感觉也不是很复杂,没几行代码,再来看看Lambda 表达式的写法:

Comparator<Developer> byName =
(Developer o1, Developer o2)->o1.getName().compareTo(o2.getName());


比之前要简单许多有木有。

下面再来看看排序功能示例:

先用Collections.sort如下:

public class TestSorting {
public static void main(String[] args) {
List<Developer> listDevs = getDevelopers();
System.out.println("Before Sort");
for (Developer developer : listDevs) {
System.out.println(developer);
}
//安装年龄排序
Collections.sort(listDevs, new Comparator<Developer>() {
@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<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]


看起来整个流程完全没毛病,下面再来看看Lambda的方式:

public class TestSorting {
public static void main(String[] args) {
List<Developer> 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));

4000
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语言都在不停的改进更新,我们有啥理由不跟上节奏呢?

由于时间问题这里只是一个简单的应用,想了解更多可到官网查找相关示例。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java lambda