【爱上Java8】一步一步走进 java8 lambda表达式
来源:互联网 发布:mysql数据库服务器配置 编辑:程序博客网 时间:2024/05/17 03:20
Java的lambda表达式可以大大简化Java的代码,Java令人诟病的一个地方就是,代码太繁琐,同样的功能使用pythong语言实现,可能只需要1/10的代码就可以完成,但是使用Java写,却会有一段的“废话”,令人很不爽,因此,java8引入了lambda表达式,致力于解决这个问题。
下面用一个简单的例子说明,比如我们要遍历一个集合,最麻烦的写法是:
2
3
4
5
Arrays.asList("Brian", "Nate", "Neal", "Raju", "Sara", "Scott");
for(int i = 0; i < friends.size(); i++) {
System.out.println(friends.get(i));
}
稍微改进一下,就变成
2
3
4
5
Arrays.asList("Brian", "Nate", "Neal", "Raju", "Sara", "Scott");
for(String name : friends) {
System.out.println(name);
}
在Java8中,提供了一个forEach接口,来实现类似的遍历功能:
2
3
4
5
6
7
Arrays.asList("Brian", "Nate", "Neal", "Raju", "Sara", "Scott");
friends.forEach(new Consumer<String>() {
public void accept(final String name) {
System.out.println(name);
}
});
初一看,更加麻烦了,但这个只是原始版本。这个forEach就是有点点函数式编程的味道,它接收一个接口,用来处理集合里的数据。这个接口的部分定义如下:
2
3
4
public interface Consumer<T> {
void accept(T t);
}
关注一下那个FunctionalInterface,表示这个是一个函数式的接口,这种接口,就可以用来函数式编程,做成一些lambda表达式之类的。
基于这个函数式的接口,我们可以简化上面的写法:
2
3
Arrays.asList("Brian", "Nate", "Neal", "Raju", "Sara", "Scott");
friends.forEach((final String name) -> System.out.println(name));
这样看起来是不是方便很多了?->的左边表示参数类型和参数名字,右边是接口的实现,java会帮你生成那个函数式接口的一个匿名类。
这还没完,可以接续简化:
2
3
Arrays.asList("Brian", "Nate", "Neal", "Raju", "Sara", "Scott");
friends.forEach((name) -> System.out.println(name));
因为java都已经知道了是什么接口,参数类型当然知道啦,所以没必要写出来,所以可以省略了,这样是不是更简单呢?
这还没完呢,既然是函数式接口,Java知道了接口的定义,参数,以及参数类型都知道了,为什么还要累赘的写出来呢,大家不是觉得java很繁琐吗?那么现在,将简洁进行到底吧!
2
3
Arrays.asList("Brian", "Nate", "Neal", "Raju", "Sara", "Scott");
friends.forEach(System.out::println);
好了,这些连参数也省了。一句话就遍历了一个集合,就指名了一个方法的引用。
可以看到java还是努力再改变自己,但是从我个人的感觉出发,我觉得写到这样就差不多了
省略太多,其实对可读性来说并不是太好。毕竟代码是写给人看的。
今天就说到这里,以后有时间,会继续分享一些java8的新特性。
- 【爱上Java8】一步一步走进 java8 lambda表达式
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- Java8: Lambda表达式语法
- java8 Lambda表达式
- Java8 Lambda表达式教程
- Java8 Lambda表达式
- java8 Lambda表达式
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- java8 lambda表达式-语法
- java8 lambda表达式-其他
- java8 lambda表达式
- Java8 Lambda表达式入门
- Spark/Java8 lambda表达式
- Java8 Lambda表达式教程
- Java8 lambda表达式
- POJ 1466 Girls and Boys(二分图最大独立集)
- “JAVABean父类转换为子类”
- 说一说程序员“举一反三”的能力(关于快速排序及其变形)
- 用Java实现简单的遗传算法
- 【广搜】海盗船
- 【爱上Java8】一步一步走进 java8 lambda表达式
- Codeforces Round #261 (Div. 2) D. Pashmak and Parmida's problem(树状数组+逆序数对)
- Leetcode练习- Unique Binary Search Tree
- VC调试
- linux守护进程编程
- POJ-3109-Inner Vertices
- StringBuffer
- 【爱上Java8】Java8函数式方法的方法引用
- hdu1548BFS