原创:花括号MC(微信公众号:huakuohao-mc)。关注JAVA基础编程及大数据,注重经验分享及我的成长。java
虽然如今Oacle
官方发布的最新JDK
版本已经到了JDK14
。但我相信不少团队的生产系统上仍是JDK8
,甚至有的团队仍是JDK7
或者JDK6
。即使不少团队已经将生产环境升级为JDK8
,可是代码却仍是老代码,也就是说根本没有使用JDK8
提供的新特性。程序员
JDK8
给程序员来带了不少便利,甚至可让Java
程序员跟Python
,Ruby
等程序员撕逼的时候,也可以扬眉吐气一把;由于JDK8
终于开始支持“行为参数化了”,也就是你们常常说的,能够把一个函数看成参数传给另外一个函数。数据库
JDK8
最明显的两个变化就是开始支持Lambda
表达式,以及集合的Stream
流式处理。这两个特性均可以让咱们写的代码更优雅,也能让咱们在实现某些功能的时候更轻松,特别是Stream
,那简直是超级好用,性价比超级高,花上20分钟去学习一下,就能让你的代码质量提高一个档次。编程
下面我列举几个简单的小场景,让各位感觉一下Java8
提供的Stream
API是多么的方便优雅,也算是抛砖引玉了。微信
平常编码的时候用的最多的应该就是集合了。好比从数据库里查询出一天卖出去多少本书,通常咱们会这样写,List<Book> books = query.find(date);
而后针对这个集合会作各类各样的操做来知足产品层面的需求。运维
JDK8以前编辑器
//打印出每本书的详情
for (Book book : books){
System.out.println(book.toString());
}
复制代码
使用Stream以后ide
//打印每本书详情
books.stream().forEach(System.out::print);
复制代码
JDK8以前函数
List<Book> highPriceBooks = new ArrayList<>();
for (Book book : books){
if (book.getPrice()>20){
highPriceBooks.add(book);
}
}
复制代码
使用Stream以后学习
highPriceBooks = books.stream().filter(book -> book.getPrice()>20).collect(Collectors.toList());
复制代码
JDK8以前
List<Book> sortBooks = new ArrayList<>();
for (Book book : books){
Collections.sort(books, new Comparator<Book>() {
@Override
public int compare(Book o1, Book o2) {
if (o1.getPrice() > o2.getPrice()){
return 1;
}else if (o1.getPrice() < o2.getPrice()){
return -1;
}else {
return 0;
}
}
});
}
复制代码
使用Stream以后
sortBooks = books.stream().sorted(Comparator.comparing(Book::getPrice)).collect(Collectors.toList());
复制代码
若是你喜欢能够直接经过reversed()
反转,像这样
sortBooks = books.stream().sorted(Comparator.comparing(Book::getPrice).reversed()).collect(Collectors.toList());
复制代码
JDK8以前
List<String> bookNames = new ArrayList<>();
for (Book book : books){
bookNames.add(book.getName());
}
复制代码
使用Stream以后
bookNames = books.stream().map(Book::getName).collect(Collectors.toList());
复制代码
JDK8以前
//计算一天当中卖出的全部书的价格总和。
int totalNum = 0;
for (Book book : books){
totalNum += book.getPrice();
}
复制代码
使用Stream以后
totalNum = books.stream().map(Book::getPrice).reduce(0,(a,b)->a+b);
复制代码
你觉得JDK8
的Stream
就这么点本事吗?它还能够完成链式处理,像这样
//选出价格高于20的两个元素。
books.stream().filter(book -> book.getPrice()> 20).limit(2).collect(Collectors.toList());
复制代码
此外若是你想利用你多核的CPU并行处理集合以提升计算速度,在JDK8
中只须要简单的调用一下parallelStream
方法。就像这样books.parallelStream().forEach(book -> book.toString());
JDK自动帮你并行处理,厉不厉害。
好了,就写这么多了,更多的使用技巧还得你本身去挖掘体会,我要去撸代码了,拜拜! 记住一句话,Java8
提供的那些新东西,值得你花更多的精力去学习研究。
推荐阅读:
·END·
Java·大数据·我的成长