java8 stream 做累加_《Java 8 in Action》Chapter 1:为什么要关心Java 8

自1998年 JDK 1.0(Java 1.0) 发布以来,Java 已经受到了学生、项目经理和程序员等一大批活跃用户的欢迎。这一语言极富活力,不断被用在大大小小的项目里。从 Java 1.1(1997年) 一直到 Java 7(2011年),Java 通过增加新功能,不断得到良好的升级。Java 8 则是在2014年3月发布的。Java 8 所做的改变,在许多方面比 Java 历史上任何一次改变都深远,而且极大的提高了 Java 代码的简洁性。

c2f2601e14b622e2e8300163798dd4d0.png

1. lambda 表达式

本文通过筛选苹果的需求引入 Java 8 ,对 inventory 中的苹果按照重量进行排序。 Java 8 之前的版本:

Collections.sort(inventory, new Comparator<Apple>() {public int compare(Apple a1, Apple a2){return a1.getWeight().compareTo(a2.getWeight());}
});

Java 8 版本:

inventory.sort(comparing(Apple::getWeight));

通过对比我们不难发现,使用 Java 8 可以编写更为简洁的代码,而且代码读起来更接近问题的描述。

2. 方法引用

在 Java 8 之前类(Class)是Java中的一等公民,Java8中将方法和lambda增加为一等公民。方法和lambda作为一等公民,是Java8中方法引用的基础。除了允许(命名)函数成为一等值外,Java 8还体现了更广义的将函数作为值的思想,包括 Lambda1(或匿名函数)。

筛选一个目录中的所有隐藏文件,Java 8 之前版本:

File[] hiddenFiles = new File(“.”).listFiles(new FileFilter() {public boolean accept (File file) {return file.isHidden();}
}

Java 8 版本:

File[] hiddenFiles = new File(".").listFiles(File::isHidden);

3. 流

在Java8之前,遍历处理集合元素,你得用for-each循环一个个去迭代元素,然后再处理元素。我们把这种数据迭代的方法称为外部迭代。相反,有了Stream API,你根本用不着操心循环的事情。数据处理完全是在库内部进行的。我们把这种思想叫作内部迭代。

Java 8 中对于大数据量的集合,用Stream API(java.util.stream)解决了:集合处理时的套路和晦涩,以及难以利用多核这两个问题。

如下展示 Java 8 中使用 Stream API 并行处理数据:

import static java.util.stream.Collectors.toList;
List<Apple> heavyApples = inventory.parallelStream().filter((Apple a) -> a.getWeight() > 150) .collect(toList());

4. 默认方法

Java 8中加入默认方法主要是为了支持库设计师,让他们能够写出更容易改进的接口。同时,普通开发者也可以在接口中使用默认方法,在实现类没有实现方法时提供方法内容,进一步方便开发。

List<Apple> heavyApples1 = inventory.stream().filter((Apple a) -> a.getWeight() > 150).collect(toList());
List<Apple> heavyApples2 = inventory.parallelStream().filter((Apple a) -> a.getWeight() > 150).collect(toList());

在Java 8之前,List并没有stream或parallelStream方法,它实现 的Collection接口也没有。Java 8 给接口设计者提供了一个扩充接口的方式,而不会破坏现有的代码。Java 8在接口声明 中使用新的default关键字来表示这一点。这样就实现了改变已发布的接口而不破坏已有的实现。

总结

本章主要总结Java 8 的主要变化(Lambda表达式、方法引用、流和默认方法),为后面更进一步学习打下坚实基础。

Tips

本文同步发表在公众号,欢迎大家关注! 后续笔记欢迎关注获取第一时间更新!

a80d6df1d119f5843df802a49face40c.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fabric go sdk 依赖的安装_从这些角度看 Go 是一门很棒的语言

Go 当前引起了很多关注。让我们看一下 Go 好的部分。我最近用 Go 写了一个 SSH 服务器[1]&#xff0c;在其中启动容器。该项目已经发展到很大规模&#xff0c;并且我向 Go 发起了 PR[2]&#xff0c;以修复我发现的错误。在积累了比 “Hello world&#xff01;” 更多的经验之后…

程序win10_win10该文件没有与之关联的程序来执行操作

当初我遇到这个问题的时候&#xff0c;也是一脸懵&#xff01;在度娘那里尝试了许多种方法&#xff0c;都没有得到解决&#xff01;那些方法我就不一一介绍了&#xff0c;百度一大堆&#xff01;下面就来分享一下我解决的办法&#xff01;1.打开默认程序2.找到设置程序访问和计…

node工程默认url_node 爬虫入门实例,简单易懂

前言本文介绍一个 koa 的爬虫项目&#xff0c;受众对象为初学前端不久的小伙伴&#xff0c;通过这个项目能对 node 爬虫有一个简单的认识&#xff0c;也能自己动手写一些简单的爬虫。项目地址&#xff1a;Fe-Icy/firm-spider​github.com启动 koa 服务Koa (koajs) -- 基于 Node…

xshell6 不更新无法使用_世纪金花商联卡无法正常使用 客服:因门店面临改造,涉及品牌、规则每天都在更新...

有效期10年、无消费限制的世纪金花商联卡在半年前开始无法正常使用&#xff0c;11月22日&#xff0c;世纪金花赛高店内200多个零售品牌&#xff0c;只有一个品牌可以无金额限制地正常使用商联卡&#xff0c;世纪金花各门店每日可使用的品牌数量、规则都在变化&#xff0c;什么时…

linux ls 中文乱码_每天一个linux命令:Linux文件类型与扩展名

Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz &#xff0c;这些文件虽然要用不同的程序来打开&#xff0c;但放在Linux文件类型中衡量的话&#xff0c;大多是常规文件&#xff08;也被称为普通文件&…

linux中cooy命令_Linux:CentOS 7中常用的基础命令

对于学习Linux系统来说&#xff0c;命令是必须熟练掌握的第一个部分。Linux系统中的命令有600多个&#xff0c;但常用的基础命令并不多。虽然不同版本的Linux系统的命令稍有不同&#xff0c;但命令的语法与使用方法基本相同&#xff0c;因此读者只要掌握了CentOS 7中常用的基础…

730阵列卡支持多大硬盘_3分钟告诉你:OPPO Reno普通版和旗舰版的差距到底有多大...

昨天OPPO正式发布了Reno系列手机&#xff1a;分为标准版和旗舰版两款。宣传普通版的售价和旗舰版的卖点是手机厂商一贯的传统。为了搞清楚普通版和旗舰版的差距到底有多大&#xff0c;今天我和大家一起扒一扒这两款手机之间的区别到底有多大&#xff0c;供大家在选机时做一个参…

查看list的形状_用Wordcloud生成指定形状的词云图

wordcloud是Python扩展库中一种将词语用图片表达出来的一种形式&#xff0c;通过词云生成的图片&#xff0c;我们可以更加直观的看出某篇文章的故事梗概。首先贴出一张词云图(以哈利波特小说为例)&#xff1a;在生成词云图之前&#xff0c;首先要做一些准备工作1.安装结巴分词库…

oc引导win方法_[OC更新]机械革命8代、9代标压稳定版更新

加关注这种话银家怎么好意思说出口嘛更新机型机械革命Z2G机械革命Z2AIRG机械革命X3(9th ver)机械革命umi air(1080p ver)机械革命X9TI机械革命X8TI-R机械革命X8TI-G机械革命Z2机械革命Z2AIR机械革命X8TI机械革命X8TI PLUS机械革命X3(8th ver)机械革命S1PLUS(8750H)机械革命X2更…

有机晶体数据库_Cambridge Structural Database 2017 晶体结构分析软件分享

文 / 利刃君微信ID / ziyuanliren666全文共2024字&#xff0c;推荐阅读时间6分钟。剑桥结构数据库系统(The Cambridge Structural Database System&#xff0c;简写为CSDS)是基于X光和中子衍射实验唯一的小分子及金属有机分子晶体的结构数据库&#xff0c;收录了全世界范围内所…

win ftp 指定的密码无效。请键入新密码。_重设OS X (macOS)系统帐户密码的5种方法...

为了保护自己的隐私安全&#xff0c;不少 Mac 用户都会选择给自己的设备设置密码&#xff0c;但是时不时的会出现忘掉密码的情况。分享找回&#xff08;重设&#xff09;OS X &#xff08;macOS&#xff09;系统账号密码的5种方法。如果你忘记了 OS X &#xff08;macOS&#x…

滑动翻页效果_Flutter实现3D效果,一个字,炫!

老孟的博客地址&#xff1a;http://laomengit.com/Flutter 中3D效果是通过Transform组件实现的&#xff0c;没有变换效果的实现&#xff1a;class TransformDemo extends StatelessWidget {overrideWidget build(BuildContext context) {return Scaffold( appBar: AppBar(…

MySQL8怎么设置时区为东八区_mysql时区设置为东八区

场景:后台返回给页面的时间统一差8小时。 分析:差八小时,应该是时区问题。具体的是哪一层出的问题呢,mybatis?mysql?系统时间? 解析: 1.查询mysql时区(正常) 输入show variables like "%time_zone%";,显示当前时区 全局参数system_time_zone 系统时区,在My…

mysql网络异常_mysql运行过程中因网络或者数据库原因导致的异常

1、异常信息:The driver has not received any packets from the server异常栈&#xff1a;原因&#xff1a;此异常为jdbc自身的超时限制&#xff0c;一般为应用调用jdbc的API设置了queryTimeout超时限制&#xff0c;当成功获取数据库连接执行sql的时候与mysql服务端断开&#…

js清空文本框的值_一个Vue.js实例控制字变大变小,含样式操作,flex布局。「603」...

这是一个用vue.js对css操作完成的实例。当然用了flex简单布局。一、先创建一个html文件&#xff0c;记得添加vue库文件。二、创建一盒容器vmdiv&#xff0c;用vue绑定它&#xff0c;测试vue绑定后的插入值text1效果。三、加入文本框和两个按钮。四、通过flex排序&#xff0c;让…

mysql mybatis 工具类_我肝了一个星期,为你们整理出了mybatis程序配置教程

1、搭建实验数据库我们创建一个mybatis实验数据库&#xff0c;并创建一个user表为后续实验准备2、IDEA新建项目&#xff0c;连接数据库新建一个普通的maven项目删除src目录&#xff0c;作为父工程pom.xml中导入相关的maven依赖1、 MySQL驱动2、 MyBatis驱动3、 junit驱动连接我…

mysql gt resource_实用干货,MYSQL这么用就对啦

本文主要梳理了 SQL 的基础用法&#xff0c;会涉及到以下方面内容&#xff1a;SQL大小写的规范数据库的类型以及适用场景SELECT 的执行过程WHERE 使用规范MySQL 中常见函数子查询分类如何选择合适的 EXISTS 和 IN子查询了解 SQLSQL 是我们用来和数据打交道的方式之一&#xff0…

python 查看当前目录_Python学习第156课--ls的运用、环境变量以及PATH

【每天几分钟&#xff0c;从零入门python编程的世界&#xff01;】之前简单的介绍了Linux中几个简单的命令。这节再深入一点介绍下 ls 的运用。lsls相当于是list的简写&#xff0c;它的作用是把我们当前目录中的文件列举出来。ls -l把当前目录下的文件以及它的具体信息列举出来…

python对数组的操作_Python对数组的基本操作

# codingutf-8Created on 2014-3-29author: Administrator创建并打印数组arr ["aex", "bfe", "mpilgrim", "zddd", "example"];print(arr);#[aex, bfe, mpilgrim, zddd, example]print(arr[2]);#mpilgrim数组的负索引li[-n…

莫烦python博客_《莫烦Python》笔记 -- numpy部分

个人感觉&#xff0c;在numpy里&#xff0c;从说法上&#xff0c;数组与矩阵可以互换1.1 numpy & pandas有什么用&#xff1f;1.2 numpy & pandas的安装安装Anaconda2.1 numpy属性import numpy as np# 将一个列表转化为矩阵array np.array([[1,2,3],[2,3,4]])# 查看矩…