Java8-13-Stream 使用实战
付诸实战
在本节中,我们会将迄今学到的关于流的知识付诸实践。我们来看一个不同的领域:执行交易的交易员。
你的经理让你为八个查询找到答案。
找出2011年发生的所有交易,并按交易额排序(从低到高)。
交易员都在哪些不同的城市工作过?
查找所有来自于剑桥的交易员,并按姓名排序。
返回所有交易员的姓名字符串,按字母顺...
2019-02-27 07:48:49 |
Java
Java8-12-Stream 使用流
使用流
在上一篇的读书笔记中,我们已经看到了流让你从外部迭代转向内部迭代。
这样,你就用不着写下面这样的代码来显式地管理数据集合的迭代(外部迭代)了:
/**
* 菜单
*/
public static final List<Dish> MENU =
Arrays.asList(new Dish("pork", false, 800, Dish.Type...
2019-02-27 07:48:49 |
Java
Java8-11-Stream 引入流
流是什么
流是Java API的新成员,它允许你以声明的方式处理数据集合,简单来说,可以把它当作数据集的高级迭代器。
此外,流还可以透明地并行处理,你无需写任何多线程代码了。
举例说明
举个例子来说明流的好处,有一个简单的场景,要求返回低热量的菜肴名称,并按照卡路里排序,实体代码如下:
基础类
菜肴
public class Dish {
private fin...
2019-02-27 07:48:49 |
Java
Java8-10-行为参数化
行为参数化
在软件开发中,一个众所周知的问题就是无论你做什么,用户的需求总会改变。
举个栗子,假设要做一个帮助农场主理解库存的应用。
一开始,农场主可能想有一个在所有库存中找出所有绿色苹果的功能。
但是第二天他可能会告诉你他还想要找到所有重量大于150g的苹果。
两天后,他可能又提出找到所有绿色的并且重量大于150g的苹果。
在面对这些相似的新功能时,我们都想尽可能的减少开发量。...
2019-02-27 07:48:49 |
Java
Java8-09-functional 函数式编程
Functional Programming in Java
Lambda expressions are lightweight, highly concise anonymous methods backed by functional interfaces in Java 8.
You can use them to leap forward into a whole new wo...
2019-02-27 07:48:49 |
Java
Java8-08-java8 datetime 日期类
Java SE 8 Date and Time
为什么需要?
Java开发人员的一个长期困扰是对普通开发人员的日期和时间用例的支持不足。
例如,现有的类(例如java.util.Date 和 SimpleDateFormatter)并不是线程安全的,这给用户带来了潜在的并发问题——这不是一般开发人员在编写日期处理代码时所期望处理的问题。
一些日期和时间类也显示出相当糟糕的API设计。...
2019-02-27 07:48:49 |
Java
Java8-07-ChronoUnit 日期枚举类
ChronoUnit
一组标准的日期时间单位。
这组单元提供基于单元的访问来操纵日期,时间或日期时间。 可以通过实现TemporalUnit来扩展标准单元集。
这些单元适用于多个日历系统。
例如,大多数非ISO日历系统定义年,月和日的单位,只是略有不同的规则。 每个单元的文档说明了它的运作方式。
这是一个最终的、不可变的和线程安全的枚举。
入门例子
plus() 测试
@Te...
2019-02-27 07:48:49 |
Java
java8-06-lambda 复合使用
复合Lambda 表达式的有用方法
Java8的好几个函数式接口都有为方便而设计的方法。具体而言,许多函数式接口,比如用于传递Lambda表达式的Comparator、Function和Predicate都提供了允许你进行复合的方法。
这是什么意思呢?
在实践中,这意味着你可以把多个简单的Lambda复合成为复杂的表达式。比如,你可以让两个谓词之间做一个or操作,组合成为了一个更大的谓...
2019-02-27 07:48:49 |
Java