草庐IT

读Java8函数式编程笔记03_高级集合类和收集器

1. 方法引用1.1. 一种引用方法的轻量级语法1.1.1. 提供了一种简短的语法1.1.2. 标准语法为Classname::methodName1.2. 凡是使用Lambda表达式的地方,就可以使用1.3. 自动支持多个参数1.3.1. 前提是选对了正确的函数接口2. 出现顺序2.1. 流是有序的2.1.1. 流中的元素都是按顺序处理的2.2. 依赖于数据源和对流的操作2.3. 在一个有序集合中创建一个流时,流中的元素就按出现顺序排列2.3.1. List2.4. 如果集合本身就是无序的,由此生成的流也是无序的2.4.1. HashSet2.5. 一些操作在有序的流上开销更大,调用unor

读Java8函数式编程笔记03_高级集合类和收集器

1. 方法引用1.1. 一种引用方法的轻量级语法1.1.1. 提供了一种简短的语法1.1.2. 标准语法为Classname::methodName1.2. 凡是使用Lambda表达式的地方,就可以使用1.3. 自动支持多个参数1.3.1. 前提是选对了正确的函数接口2. 出现顺序2.1. 流是有序的2.1.1. 流中的元素都是按顺序处理的2.2. 依赖于数据源和对流的操作2.3. 在一个有序集合中创建一个流时,流中的元素就按出现顺序排列2.3.1. List2.4. 如果集合本身就是无序的,由此生成的流也是无序的2.4.1. HashSet2.5. 一些操作在有序的流上开销更大,调用unor

读Java8函数式编程笔记04_类库

1. 默认方法1.1. 接口中定义的包含方法体的方法,方法名有default关键字做前缀1.1.1. 在任何接口中,无论函数接口还是非函数接口,都可以使用该方法1.2. Collection接口1.2.1. stream方法1.3. Iterable接口1.3.1. forEach方法1.4. 虚方法1.5. 类中重写的方法优先级高于接口中定义的默认方法1.5.1. 能简化很多继承问题1.5.2. 任何时候,一旦与类中定义的方法产生冲突,都要优先选择类中定义的方法1.5.3. 如果类中重写的方法没有默认方法的优先级高,那么就会破坏已有的实现1.5.4. 为了在接口上向后兼容2. 接口的静态方法

读Java8函数式编程笔记04_类库

1. 默认方法1.1. 接口中定义的包含方法体的方法,方法名有default关键字做前缀1.1.1. 在任何接口中,无论函数接口还是非函数接口,都可以使用该方法1.2. Collection接口1.2.1. stream方法1.3. Iterable接口1.3.1. forEach方法1.4. 虚方法1.5. 类中重写的方法优先级高于接口中定义的默认方法1.5.1. 能简化很多继承问题1.5.2. 任何时候,一旦与类中定义的方法产生冲突,都要优先选择类中定义的方法1.5.3. 如果类中重写的方法没有默认方法的优先级高,那么就会破坏已有的实现1.5.4. 为了在接口上向后兼容2. 接口的静态方法

读Java8函数式编程笔记05_数据并行化

1. 并发1.1. 两个任务共享时间段1.2. 一个程序要运行两个任务,并且只有一个CPU给它们分配了不同的时间片,那么这就是并发,而不是并行2. 并行2.1. 两个任务在同一时间发生2.2. 为缩短任务执行时间,将一个任务分解成几部分,然后并行执行2.3. 和顺序执行的任务量是一样的,区别就像用更多的马来拉车,花费的时间自然减少了2.4. 重要2.4.1. 不能再依赖提升CPU的时钟频率来提高现有代码的计算能力2.4.2. 需要利用现代CPU的架构,而这唯一的办法就是编写并行化的代码2.4.3. 阿姆达尔定律2.4.3.1. 一个简单规则,预测了搭载多核处理器的机器提升程序速度的理论最大值2

读Java8函数式编程笔记05_数据并行化

1. 并发1.1. 两个任务共享时间段1.2. 一个程序要运行两个任务,并且只有一个CPU给它们分配了不同的时间片,那么这就是并发,而不是并行2. 并行2.1. 两个任务在同一时间发生2.2. 为缩短任务执行时间,将一个任务分解成几部分,然后并行执行2.3. 和顺序执行的任务量是一样的,区别就像用更多的马来拉车,花费的时间自然减少了2.4. 重要2.4.1. 不能再依赖提升CPU的时钟频率来提高现有代码的计算能力2.4.2. 需要利用现代CPU的架构,而这唯一的办法就是编写并行化的代码2.4.3. 阿姆达尔定律2.4.3.1. 一个简单规则,预测了搭载多核处理器的机器提升程序速度的理论最大值2

读Java8函数式编程笔记06_Lambda表达式编写并发程序

1. 阻塞式I/O1.1. 一种通用且易于理解的方式,因为和程序用户的交互通常符合这样一种顺序执行的方式1.2. 将系统扩展至支持大量用户时,需要和服务器建立大量TCP连接,因此扩展性不是很好2. 非阻塞式I/O2.1. 异步I/O2.2. 可以处理大量并发网络连接,而且一个线程可以为多个连接服务2.3. 适用场景2.3.1. 业务逻辑本身就使用事件来描述2.3.1.1. Twitter2.3.1.2. 图形化展示股票价格2.3.2. 应用需要同时处理大量I/O操作2.3.2.1. 阻塞式I/O需要同时使用大量线程,这会导致大量锁之间的竞争和太多的上下文切换3. 消息传递架构3.1. Vert

读Java8函数式编程笔记06_Lambda表达式编写并发程序

1. 阻塞式I/O1.1. 一种通用且易于理解的方式,因为和程序用户的交互通常符合这样一种顺序执行的方式1.2. 将系统扩展至支持大量用户时,需要和服务器建立大量TCP连接,因此扩展性不是很好2. 非阻塞式I/O2.1. 异步I/O2.2. 可以处理大量并发网络连接,而且一个线程可以为多个连接服务2.3. 适用场景2.3.1. 业务逻辑本身就使用事件来描述2.3.1.1. Twitter2.3.1.2. 图形化展示股票价格2.3.2. 应用需要同时处理大量I/O操作2.3.2.1. 阻塞式I/O需要同时使用大量线程,这会导致大量锁之间的竞争和太多的上下文切换3. 消息传递架构3.1. Vert

读Java8函数式编程笔记07_设计和架构的原则

1. SOLID原则1.1. 开发良好面向对象程序的准则1.2. Liskovsubstitution里氏替换1.3. Interfacesegregation接口隔离1.4. Singleresponsibility单一功能原则1.4.1. 程序中的类或方法只能有一个改变的理由1.4.2. 一个类不仅要功能单一,而且还需将功能封装好1.5. Open/closed开闭原则1.5.1. 软件应该对扩展开放,对修改闭合1.5.1.1. 让软件易于修改1.5.2. 高阶函数在用多态来实现开闭原则1.5.3. 使用不可变对象实现开闭原则1.6. Dependencyinversion依赖反转原则1.

读Java8函数式编程笔记07_设计和架构的原则

1. SOLID原则1.1. 开发良好面向对象程序的准则1.2. Liskovsubstitution里氏替换1.3. Interfacesegregation接口隔离1.4. Singleresponsibility单一功能原则1.4.1. 程序中的类或方法只能有一个改变的理由1.4.2. 一个类不仅要功能单一,而且还需将功能封装好1.5. Open/closed开闭原则1.5.1. 软件应该对扩展开放,对修改闭合1.5.1.1. 让软件易于修改1.5.2. 高阶函数在用多态来实现开闭原则1.5.3. 使用不可变对象实现开闭原则1.6. Dependencyinversion依赖反转原则1.