clear old record
This commit is contained in:
245
pages/Java8实战.md
Normal file
245
pages/Java8实战.md
Normal file
@@ -0,0 +1,245 @@
|
||||
- Java 8新特性
|
||||
- Steam API
|
||||
- [[流处理]]
|
||||
- Stream<T>
|
||||
- 类似流水线
|
||||
- 可以将输入不相关的部分拿到几个CPU内核上执行
|
||||
- 不能访问共享的可变数据
|
||||
- 向方法传递代码的技巧
|
||||
- [[函数式编程]]
|
||||
- 接口中的默认方法
|
||||
- [[函数]]
|
||||
- 通过::直接调用该方法
|
||||
- 匿名函数
|
||||
- 传递方法
|
||||
- 通过行为参数化传递代码
|
||||
- 一个方法接受不同的行为作为参数,并在内部使用
|
||||
- 可以使代码更好的适应不断变化的需求
|
||||
- JavaAPI包含排序,线程等多种不同行为进行参数化的方法
|
||||
- Lambda表达式
|
||||
- 特点
|
||||
- 简洁
|
||||
- 函数
|
||||
- 传递
|
||||
- 匿名
|
||||
- 组成部分
|
||||
- 参数列表
|
||||
- 箭头
|
||||
- 主体
|
||||
- 使用范围
|
||||
- 函数式接口
|
||||
- java.util.function
|
||||
- Predicate
|
||||
- test方法
|
||||
- 接受T
|
||||
- 返回boolean
|
||||
- filter方法
|
||||
- Consumer
|
||||
- accept方法
|
||||
- 接受T
|
||||
- void返回
|
||||
- foreach方法
|
||||
- Function
|
||||
- apply方法
|
||||
- 接受T
|
||||
- 返回R
|
||||
- map方法
|
||||
- Supplier
|
||||
- 无输入
|
||||
- 返回T
|
||||
- 其他函数式接口
|
||||
- 定义一个抽象方法的接口
|
||||
- 只有一个抽象方法就是函数式接口
|
||||
- 通过@FunctionalInterface可在编译时检查
|
||||
- Comparator
|
||||
- Runable
|
||||
- Callable...
|
||||
- 以内联形式直接实现函数式接口的抽象方法
|
||||
- 环绕执行
|
||||
- 打开->处理->关闭
|
||||
- 异常处理
|
||||
- 任何函数式接口都不允许抛出受检异常
|
||||
- 需要抛出异常处理
|
||||
- try-catch块
|
||||
- 定义自己的函数式接口
|
||||
- 类型检查
|
||||
- 检查入参和出参
|
||||
- 抛出异常也要和throw语句匹配
|
||||
- Void兼容规则
|
||||
- 局部变量
|
||||
- 需要为final或最终的
|
||||
- 使用Lambda时是在另一个线程中使用,访问的为副本
|
||||
- 方法引用
|
||||
- 使用::直接应用方法
|
||||
- 静态方法
|
||||
- 实例类型实例方法
|
||||
- 现有对象的实例方法
|
||||
- 引入流
|
||||
- 以声明式方式处理数据集合
|
||||
- 声明性--更简洁,更易读
|
||||
- 可复合--更灵活
|
||||
- 可并行--性能更好
|
||||
- stream方法
|
||||
- filter
|
||||
- map
|
||||
- limit
|
||||
- collect
|
||||
- 从支持数据处理操作的源生成的元素序列
|
||||
- 只能遍历一次
|
||||
- 外部迭代
|
||||
- 使用for-each或iterator
|
||||
- 内部迭代
|
||||
- 流
|
||||
- 中间操作
|
||||
- 返回另一个流
|
||||
- filter
|
||||
- sorted
|
||||
- 终端操作
|
||||
- 从流生成结果LIst Integer Void
|
||||
- foreach
|
||||
- collect
|
||||
- 使用流
|
||||
- 筛选和切片
|
||||
- 筛选filter
|
||||
- 筛选各异的流distinct
|
||||
- 截短limit
|
||||
- 跳过skip
|
||||
- 跳过前n个元素
|
||||
- 映射
|
||||
- 对每一个元素应用函数map
|
||||
- 扁平化flatMap(Arrays::stream)
|
||||
- 将流中的每个值都换成另一个流,再合成一个
|
||||
- 查找和匹配
|
||||
- anyMatch返回boolean
|
||||
- allMatch
|
||||
- noneMatch
|
||||
- findAny
|
||||
- findFirst
|
||||
- 归约
|
||||
- reduce
|
||||
- 求和reduce(0, (a, b) -> a+b )
|
||||
- 求积reduce(1, (a, b) -> a*b )
|
||||
- 最大值reduce(Integer::max)
|
||||
- 最小值reduce(Integer::min)
|
||||
- 原始类型流特化
|
||||
- mapToInt
|
||||
- 返回IntStream可以使用sum()求和
|
||||
- 默认值OptionalInt
|
||||
- mapToDouble
|
||||
- mapToLong
|
||||
- 转化回对象流
|
||||
- boxed()
|
||||
- 数值范围
|
||||
- range不包含结束值
|
||||
- rangeClosed包含结束值
|
||||
- 勾股数生成
|
||||
- 构建流
|
||||
- Stream.of()
|
||||
- Stream.empty()
|
||||
- Stream.iteratoe
|
||||
- Stream.generate
|
||||
- 用流收集数据
|
||||
- collect
|
||||
- Collectors
|
||||
- toList
|
||||
- counting
|
||||
- maxBy
|
||||
- minBy
|
||||
- summingInt求和
|
||||
- summingDouble
|
||||
- averageInt求平均
|
||||
- averageDouble
|
||||
- summarizingInt得到个数,求和,平均。最大,最小
|
||||
- summarizingDouble
|
||||
- joining连接所有字符串 `joining(“, ”)`
|
||||
- reducing
|
||||
- 分组
|
||||
- groupingBy
|
||||
- 多级分组
|
||||
- 二级groupingBy
|
||||
- counting
|
||||
- collectingAndThen装换optional类型
|
||||
- 分区
|
||||
- partitioningBy
|
||||
- 返回boolean
|
||||
- 并行数据处理与性能
|
||||
- parallelStream
|
||||
- 转为并行parallel
|
||||
- 转为顺序流sequential()
|
||||
- 使用了默认的ForkJoinPool
|
||||
- 线程数为处理器数量Runtime.getRuntime().availableProcessors()
|
||||
- 性能
|
||||
- 正确使用并行流加速
|
||||
- 避免装箱操作
|
||||
- 避免共享可变状态
|
||||
- 考虑顺序流
|
||||
- 数据量大小
|
||||
- 数据结构是否易于分解
|
||||
- LinkedList拆分需要遍历
|
||||
- 合并步骤代价大小
|
||||
- 分支/合并框架
|
||||
- 对一个任务调用回阻塞调用方
|
||||
- 工作窃取
|
||||
- 当一个线程空闲时获取其他线程的任务,避免等待
|
||||
- Spliterator可分迭代器
|
||||
- 重构、测试和调试
|
||||
- 设计模式
|
||||
- 策略模式
|
||||
- 一个代表算法的接口
|
||||
- 一个或多个该接口的具体实现
|
||||
- 一个或多个使用策略对象的客户
|
||||
- 模板方法
|
||||
- 继承某个抽象方法提供差异化实现
|
||||
- 观察者模式
|
||||
- 当某些事件发生式,一个对象(主题)需要自动通知其他多个对象(观察者)
|
||||
- 责任链模式
|
||||
- 一个处理对象将一些工作完成之后传递给另一个对象
|
||||
- Lambda andThen方法
|
||||
- 工厂模式
|
||||
- 无需暴露实例化的逻辑就可以完成对象的创建
|
||||
- 调试
|
||||
- 查看栈跟踪
|
||||
- 输出日志
|
||||
- 默认方法
|
||||
- 已发布的API,当一个接口修改时,实现类客户也许要实现该方法
|
||||
- 接口可以声明静态方法
|
||||
- 接口可在声明方法的同时提供实现
|
||||
- 通过default修饰符声明
|
||||
- 使用用例
|
||||
- 可选方法,用不上的就不实现
|
||||
- 行为的多继承
|
||||
- 默认方法的冲突
|
||||
- 类中的方法优先级最高
|
||||
- 子接口的优先级更高,更具体,继承的要更高
|
||||
- 显示覆盖和调用期望的方法选择实现
|
||||
- X.super.m()
|
||||
- 实习后选择使用哪个
|
||||
- 菱形继承
|
||||
- 用Optional取代null
|
||||
- 防御式检查减少NullPointException
|
||||
- 安全导航操作符
|
||||
- 可以将字段声明为Option类
|
||||
- 创建Optional对象
|
||||
- Optional.empty()
|
||||
- Optional.of(car)
|
||||
- Optional.ofNullable(car)
|
||||
- 用map获取和转换值
|
||||
- Optional.map(Insurance::getName)
|
||||
- flatMap避免Optional<Optional<Car>>类型
|
||||
- 在类的变量使用Optional无法序列化会报错
|
||||
background-color:: yellow
|
||||
- 解引用Optional
|
||||
- get()
|
||||
- orElse(T other)
|
||||
- orElseGet()
|
||||
- orElseThrow()
|
||||
- ifPresent()
|
||||
- Optional对象组合
|
||||
- filter
|
||||
- CompletableFuture组合式异步编程
|
||||
- Future接口
|
||||
- 新的日期和时间api
|
||||
- 函数式的思考
|
||||
- 函数式编程的技巧
|
||||
- 面向对象和函数式编程的混合:Java8和Scale的比较
|
||||
- 结论及Java未来
|
||||
Reference in New Issue
Block a user