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

JDK8 Lambdas (一)

2016-08-31 19:23 337 查看
摘要: 一个Java8最重要的特征是引入Lambda表达式。它使你的代码简洁。一段时间以来,Java已经被批评为冗长和缺乏功能的编程语言。函数式编程变得更加流行,Java是被迫接受的函数式编程风格,否则Java将变得无关紧要。

详细的请查看Lambda

小栗子认识一下Lambda 函数编程:

public class LambdasTest {
public static void main(String[] args) {
List<String> names = Arrays.asList("palmg", "kai", "shui");
//按照字符的长度排序
Collections.sort(names, (first, second) -> first.length() - second.length());
//打印每个字符
names.forEach(System.out::println);
}
}

##lambdas的使用

###1. 匿名函数 VS lambdas

public class LambdasTest01 {
interface Message {
void send(Runnable runnable);

}
static class PhoneMessage implements Message {
private AtomicInteger num = new AtomicInteger(0);
@Override
public void send(Runnable runnable) {
runnable.run();
System.out.println("--------------我是分界线" + (num.getAndIncrement()) + "-----------------");
}
}

public static void main(String[] args) {
PhoneMessage phoneMessage = new PhoneMessage();
//1. jdk 8 之前我们需要实现一个匿名函数
phoneMessage.send(new Runnable() {
@Override
public void run() {
System.out.println("匿名函数写法");
}
});

//2. jkd8之后,我们可以这样
phoneMessage.send(() -> System.out.println("lambdas表达方式"));
}
}

执行结果:

匿名函数写法
--------------我是分界线0-----------------
lambdas表达方式
--------------我是分界线1-----------------

###2. 集合排序 vs lambdas

/**
* Lambdas Comparator
* Created by Kaishui on 2016/8/30.
*/
public class LambdasTest02 {
static class NameComparator implements Comparator<String> {
@Override
public int compare(String first, String second) {
return first.compareTo(second);
}
}
public static void main(String[] args) {
List<String> names = Arrays.asList("palmg", "kai", "shui");
System.out.println("1.方法一: jdk8之前,按照名称排序");
Collections.sort(names, new NameComparator());
for (String name : names) { //打印
System.out.println(name);
}

System.out.println("2.方法二: dk8之前,按照名称排序");
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String first, String second) {
return first.compareTo(second);
}
});
for (String name : names) { //打印
System.out.println(name);
}

System.out.println("---------我只是一条分割线-------------");
System.out.println("3. jdk8 lamdas");
Collections.sort(names, (first, second) -> first.compareTo(second));
names.forEach(System.out::println);
}
}

执行结果:

1.方法一: jdk8之前,按照名称排序
kai
palmg
shui
2.方法二: dk8之前,按照名称排序
kai
palmg
shui
---------我只是一条分割线-------------
3. jdk8 lamdas
kai
palmg
shui

上述两个例子看到不仅仅是一个代码量的差距,lambdas写得还是很优美的。

下一篇将介绍:Predicate、Consumer、Function、Supplier
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jdk8 lambdas comparator JDK