![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java 8
文章平均质量分 96
Willow51
这个作者很懒,什么都没留下…
展开
-
Java 8 学习笔记1——Java 8 概述
Java 8提供了一个新的API(称为“流”,Stream),它支持许多处理数据的并行操作,其思路和在数据库查询语言中的思路类似——用更高级的方式表达想要的东西,而由“实现”(在这里是Streams库)来选择最佳低级执行机制。这样就可以避免用synchronized编写代码,这一代码不仅容易出错,而且在多核CPU上执行所需的成本也比你想象的要高。在Java 8中加入Streams可以看作把另外两...原创 2018-12-10 17:38:44 · 346 阅读 · 0 评论 -
Java 8 学习笔记2——通过行为参数化传递代码
行为参数化就是可以帮助你处理频繁变更的需求的一种软件开发模式。一言以蔽之,它意味着拿出一个代码块,把它准备好却不去执行它。这个代码块以后可以被你程序的其他部分调用,这意味着你可以推迟这块代码的执行。例如,你可以将代码块作为参数传递给另一个方法,稍后再去执行它。这样,这个方法的行为就基于那块代码被参数化了。例如,如果你要处理一个集合,可能会写一个方法:可以对列表中的每个元素做“某件事”可以在列...原创 2018-12-11 15:24:02 · 266 阅读 · 0 评论 -
Java 8 学习笔记3——Lambda 表达式
Lambda 表达式简介利用行为参数化来传递代码有助于应对不断变化的需求。它允许你定义一个代码块来表示一个行为,然后传递它。你可以决定在某一事件发生时(例如单击一个按钮)或在算法中的某个特定时刻(例如筛选算法中类似于“重量超过150克的苹果”的谓词,或排序中的自定义比较操作)运行该代码块。一般来说,利用这个概念,你就可以编写更为灵活且可重复使用的代码了。但使用匿名类来表示不同的行为并不令人满意...原创 2018-12-11 17:30:14 · 499 阅读 · 1 评论 -
Java 8 学习笔记4——流的概念
流是什么流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。就现在来说,你可以把它们看成遍历数据集的高级迭代器。此外,流还可以透明地并行处理,你无需写任何多线程代码了!我们简单看看使用流的好处吧。下面两段代码都是用来返回低热量的菜肴名称的,并按照卡路里排序,一个是用Java 7写的,另一个是用Java 8的流写的。Java 7:L...原创 2018-12-12 19:14:37 · 352 阅读 · 0 评论 -
Java 8 学习笔记5——使用流
流让你从外部迭代转向内部迭代。这样,你就用不着写下面这样的代码来显式地管理数据集合的迭代(外部迭代)了:List<Dish> vegetarianDishes=new ArrayList<>();for(Dish d: menu){ if(d.isVegetarian()){ vegetarianDishes.add原创 2018-12-13 11:16:57 · 349 阅读 · 0 评论 -
Java 8 学习笔记6——用流收集数据
流可以用类似于数据库的操作帮助你处理集合。你可以把Java 8的流看作花哨又懒惰的数据集迭代器。它们支持两种类型的操作:中间操作(如filter或map)和终端操作(如count、findFirst、forEach和reduce)。中间操作可以链接起来,将一个流转换为另一个流。这些操作不会消耗流,其目的是建立一个流水线。与此相反,终端操作会消耗流,以产生一个最终结果,例如返回流中的最大元素。它们通...原创 2018-12-14 14:50:25 · 340 阅读 · 0 评论 -
Java 8 学习笔记7——并行数据处理与性能
将外部迭代换为内部迭代能够让原生Java库控制流元素的处理。这种方法让Java程序员无需显式实现优化来为数据集的处理加速。到目前为止,最重要的好处是可以对这些集合执行操作流水线,能够自动利用计算机上的多个内核。例如,在Java 7之前,并行处理数据集合非常麻烦。第一,你得明确地把包含数据的数据结构分成若干子部分。第二,你要给每个子部分分配一个独立的线程。第三,你需要在恰当的时候对它们进行同步来避...原创 2018-12-17 15:15:48 · 782 阅读 · 0 评论 -
Java 8 学习笔记8——重构、测试和调试
为改善可读性和灵活性重构代码利用Lambda表达式,你可以写出更简洁、更灵活的代码。用“更简洁”来描述Lambda表达式是因为相较于匿名类,Lambda表达式可以帮助我们用更紧凑的方式描述程序的行为。如果你希望将一个既有的方法作为参数传递给另一个方法,那么方法引用无疑是我们推荐的方法,利用这种方式我们能写出非常简洁的代码。采用Lambda表达式之后,你的代码会变得更加灵活,因为Lambda表达...原创 2018-12-18 17:17:32 · 534 阅读 · 0 评论 -
Java 8 学习笔记9——默认方法
传统上,Java程序的接口是将相关方法按照约定组合到一起的方式。实现接口的类必须为接口中定义的每个方法提供一个实现,或者从父类中继承它的实现。但是,一旦类库的设计者需要更新接口,向其中加入新的方法,这种方式就会出现问题。现实情况是,现存的实体类往往不在接口设计者的控制范围之内,这些实体类为了适配新的接口约定也需要进行修改。由于Java 8的API在现存的接口上引入了非常多的新方法,这种变化带来的...原创 2018-12-21 15:28:55 · 371 阅读 · 0 评论 -
Java 8 学习笔记10——用Optional取代null
null带来的种种问题它是错误之源。NullPointerException是目前Java程序开发中最典型的异常。它会使你的代码膨胀。它让你的代码充斥着深度嵌套的null检查,代码的可读性糟糕透顶。它自身是毫无意义的。null自身没有任何的语义,尤其是,它代表的是在静态类型语言中以一种错误的方式对缺失变量值的建模。它破坏了Java的哲学。Java一直试图避免让程序员意识到指针的存在,唯一...原创 2018-12-21 17:44:08 · 1278 阅读 · 2 评论 -
Java 8 学习笔记11——CompletableFuture:组合式异步编程
Future接口Future接口在Java 5中被引入,设计初衷是对将来某个时刻会发生的结果进行建模。它建模了一种异步计算,返回一个执行运算结果的引用,当运算结束后,这个引用被返回给调用方。在Future中触发那些潜在耗时的操作把调用线程解放出来,让它能继续执行其他有价值的工作,不再需要呆呆等待耗时的操作完成。打个比方,你可以把它想象成这样的场景:你拿了一袋子衣服到你中意的干洗店去洗。干洗店的...原创 2019-01-14 17:28:59 · 290 阅读 · 0 评论