Java 8 的 Stream 流真香,没体验过的永远不知道

栏目: IT技术 · 发布时间: 4年前

内容简介:花括号MC(huakuohao-mc):关注JAVA基础编程及大数据,注重经验分享及个人成长。

花括号MC(huakuohao-mc):关注 JAVA 基础编程及大数据,注重经验分享及个人成长。

Oacle 官方发布的最新 JDK 版本已经到了 JDK14 但我相信很多团队的生产系统还是 JDK8 ,甚至有的团队还是 JDK7 或者 JDK6 即便很多团队已经将生产环境升级为 JDK8 ,但是代码却还是老代码,也就是说根本没有使用 JDK8 提供的新特性。

JDK8程序员 来带了很多便利,甚至可以让 Java 程序员跟 PythonRuby 等程序员撕逼的时候,也能够扬眉吐气一把;因为 JDK8 终于开始支持“行为参数化了”,也就是大家经常说的, 可以把一个函数当作参数传给另一个函数

JDK8 最明显的两个变化就是开始支持 Lambda 表达式,以及集合的 Stream 流式处理。这两个特性都可以让我们写的代码更优雅,也能让我们在实现某些功能的时候更轻松,特别是 Stream ,那简直是超级好用,性价比超级高,花上20分钟去学习一下,就能让你的代码质量提升一个档次。

下面我列举几个简单的小场景,让各位感受一下 Java8 提供的 Stream API是多么的方便优雅,也算是给各位抛砖引玉了。

日常编码的时候,我们用的最多的应该就是集合了。比如从数据库里查询出一天卖出去多少本书,一般我们会这样写, List<Book> books = query.find(date); 然后针对这个集合会做各种各样的操作来满足产品层面的需求。

场景一:打印出每本书的详情。

JDK8之前

1//打印出每本书的详情
2for (Book book : books){
3    System.out.println(book.toString());
4}

使用Stream之后

1//打印每本书详情
2books.stream().forEach(book -> book.toString());

场景二:选出价格高于20元的

JDK8之前

1List<Book> highPriceBooks = new ArrayList<>();
2for (Book book : books){
3    if (book.getPrice()>20){
4        highPriceBooks.add(book);
5    }
6}

使用Stream之后

1highPriceBooks = books.stream().filter(book -> book.getPrice()>20).collect(Collectors.toList());

场景三: 按照书价排序

JDK8之前

 1List<Book> sortBooks = new ArrayList<>();
 2for (Book book : books){
 3    Collections.sort(books, new Comparator<Book>() {
 4        @Override
 5        public int compare(Book o1, Book o2) {
 6            if (o1.getPrice() > o2.getPrice()){
 7                return 1;
 8            }else if (o1.getPrice() < o2.getPrice()){
 9                return -1;
10            }else {
11                return 0;
12            }
13        }    
14     });
15}

使用Stream之后

1sortBooks = books.stream().sorted(Comparator.comparing(Book::getPrice)).collect(Collectors.toList());

如果你喜欢可以直接通过 reversed() 反转,像这样

1sortBooks = books.stream().sorted(Comparator.comparing(Book::getPrice).reversed()).collect(Collectors.toList());

场景四:获取所有书名

JDK8之前

1List<String> bookNames = new ArrayList<>();
2for (Book book : books){
3    bookNames.add(book.getName());
4}

使用Stream之后

1bookNames = books.stream().map(Book::getName).collect(Collectors.toList());

场景五:获得所有书价格总和

JDK8之前

1//计算一天当中卖出的所有书的价格总和。
2int totalNum = 0;
3for (Book book : books){
4    totalNum += book.getPrice();
5}

使用Stream之后

1totalNum = books.stream().map(Book::getPrice).reduce(0,(a,b)->a+b);

还有更多

你以为 JDK8Stream 就这么点本事吗?它还可以完成链式处理,像这样

1//选出价格高于20的两个元素。
2books.stream().filter(book -> book.getPrice()> 20).limit(2).collect(Collectors.toList());

此外如果你想利用你多核的CPU并行处理集合以提高计算速度,在 JDK8 中只需要简单的调用一下 parallelStream 方法。就像这样 books.parallelStream().forEach(book ->book.toString()); JDK自动帮你并行处理,厉不厉害。

好了,就写这么多了,更多的使用技巧还得你自己去挖掘体会,我要去撸代码了,拜拜!

记住一句话, Java8 提供的那些新东西,值得你花更多的精力去学习研究。

·END·

花括号MC

Java·大数据·个人成长

Java 8 的 Stream 流真香,没体验过的永远不知道

微信号:huakuohao-mc

点一下你会更好看耶

Java 8 的 Stream 流真香,没体验过的永远不知道


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

IT不再重要

IT不再重要

(美)尼古拉斯·卡尔 / 闫鲜宁 / 中信出版社 / 2008-10 / 29.00元

在这部跨越历史、经济和技术领域的著作中,作者从廉价的电力运营方式对社会变革的深刻影响延伸到互联网对我们生活的这个世界的重构性影响。他批判式的认为,企业想应用网络或应用程序,不再需要自建资料中心、自组IT团队维护和管理系统,因为互联网就像自来水或电力一样,可由专门公司提供服务,你可以付费使用。而如果他的设想真的会实现,我们的世界将会变成什么样子?IT产业的命运又将如何?这又对企业的IT领域投资产生什......一起来看看 《IT不再重要》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换