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

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

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

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

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

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

JDK8之前

//打印出每本书的详情

for (Book book : books){

System.out.println(book.toString());

}

使用Stream之后

//打印每本书详情

books.stream().forEach(book -> book.toString());

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

JDK8之前

List 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 sortBooks = new ArrayList<>();

for (Book book : books){

Collections.sort(books, new Comparator() {

@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 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提供的那些新东西,值得你花更多的精力去学习研究。

java8 sum_Java8的Stream流真香,没体验过的永远不会知道!相关推荐

  1. Jdk8的Stream流真香,来自程序员的花式表白

    public class LoveYingForever {public static void main(String[] args) {String cxy = "20200225&qu ...

  2. 【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?

    写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...

  3. Java8新特性Stream流详解

    陈老老老板 说明:新的专栏,本专栏专门讲Java8新特性,把平时遇到的问题与Java8的写法进行总结,需要注意的地方都标红了,一起加油. 本文是介绍Java8新特性Stream流常用方法超详细教学 说 ...

  4. Java8 Lamda和Stream流你真的会用了嘛?

    lambda表达式和stream流作为jdk8的新特性,极大程度的提高了java对函数式编程的便捷性,同时也提供了许多集合的流式操作,使我们在编程的过程中产生极大的便利,可以称之为颠覆性的更新. 目录 ...

  5. 【Stream】java8新特性Stream流总结

    一.什么是stream 在 java8 中增加了一个新的抽象接口 Stream API,使用 Stream 操作集合类似于使用 SQL 语句数据库查找数据类似,提供直观的方法进行操作. Stream ...

  6. java8新特性stream流

    参考自深蓝至尊的Java8 新特性之流式数据处理 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式 ...

  7. Java8函数式编程——Stream流

    函数式编程-Stream流 实例练习:https://javadaily.cn/post/2022020817/7f222b3057fb/ 1. 概述 1.1 为什么学? 能够看懂公司里的代码 大数量 ...

  8. java8新特性 Stream流的优雅操作

    1. 使用传统的方式,遍历集合,对集合中的数据进行过滤 //创建一个List集合,存储姓名List<String> list = new ArrayList<>();list. ...

  9. Java8新特性stream流的优雅操作

    文章目录 原因是因为我管理的小组提交代码被我review到了,发现只有个别同学使用到了stream流,所以出此blog,希望大家都写出优雅的代码 原因是因为我管理的小组提交代码被我review到了,发 ...

最新文章

  1. 2017年云计算的6大趋势
  2. python中split的用法取第二个分片_python中的split()函数的用法
  3. SQL数据库常见故障及解决方法
  4. mysql connector bin_mysql-connector-java-xxx-bin.jar包的使用
  5. 《Data-Intensive Text Processing with mapReduce》读书笔记之一:前言
  6. AI:2020年WAIC世界人工智能大会2020年7月9日9:30-12:00开幕式《李彦宏、Elon Musk、马云等大佬演讲》
  7. iptables 实际操作 之 规则查询 2
  8. NYOJ 633 幂
  9. 阻止button刷新页面
  10. 每一个工程师都要学的安全测试,老板再也不用担心服务器被黑
  11. C打印函数printf的一种实现原理简要分析
  12. Zookeeper单机安装(开启kerberos)
  13. 马斯克、吴恩达等27人出镜:AI可能成为不朽独裁者,人类就像蚂蚁束手就擒
  14. lora发射和接收原理_LoRa 的扩频技术
  15. 【梳理】离散数学 第15章 欧拉图与哈密顿图 15.3 最短路问题、中国邮递员问题与货郎担问题
  16. javax.persistence.EntityNotFoundException: Unable to find报错
  17. 赵小楼《天道》《遥远的救世主》深度解析(38)丁元英的“自嘲”和作者豆豆的深意
  18. 腾讯云大带宽云服务器20M性能评测
  19. 解决:Establishing SSL connection without server‘s identity verification is not recommended警告
  20. Suspense示例

热门文章

  1. 基于JAVA+SpringMVC+Mybatis+MYSQL的个人博客系统
  2. linux界面唤醒,Linux计算机实现自动唤醒和关闭的方法步骤详解
  3. 搜狐畅游笔试题:1. 美丽的项链(动态规划) 2.多线程并发交替输出
  4. Android通过tcpdump抓包
  5. git 9个小命令(三年修仙五年摸鱼也有喔) 一条龙服务
  6. 前端的深拷贝和浅拷贝_javascript中的深拷贝和浅拷贝?
  7. Vue-在data中引入静态图片路径
  8. 中小学生Python课应该学什么
  9. Python可以这样学(第十季:网络爬虫实战)-董付国-专题视频课程
  10. Python爬虫基础:常用HTML标签和Javascript入门