Lambda
2019-08-28 09:41:08 0 举报
AI智能生成
java-Lambda函数式编程
作者其他创作
大纲/内容
新生代Java
外部迭代与内部迭代
外部迭代
内部迭代
Collection.forEach
概念
forEach源码
命令模式
概念
Runnable实例
lambda表达式
Lambda表达式和函数式接口
lambda表达式看成是精简语法的匿名内部类。
函数式接口(functional interface)
接口中若只包含一个抽象方法,则称该接口为函数式接口
四大核心函数式接口
消费型接口
Consumer
供给型接口
Supplier
函数型接口
Function
断言型接口
Predicate
表达式语法格式:
从集合到流
实例
函数式编程
lambda表达式的基础知识
基础语法
引用规则
匿名内部类
函数式接口
问题:重载问题
流与管道
流-基础
流的改进
延迟计算
优势:1:搜索 2:流合并
串行与并行的理念
原生流
自动装箱与自动拆箱理念
剖析管道
概念
开始管道
生成流的方式
stream()
parallelSream()
转换管道
过滤
filter(Predicate<T>)
映射
map(Function<T,R>)
flatMap(Function<T,Stream<R>>)
调试
peek
排序和去重
sorted()
sorted(Comparator<T>)
distinct()
截断
skip<Long>
limit(Long)
非侵入性
线程安全问题
peek是非线程安全操作
终止管道
搜索操作
anyMatch<Predicate<t>>
allMatch(Predicate<T>)
noneMatch(Predicate<T>)
findFirst()
findAny()
Optional
get()
ifPresent(Consumer<T>)
isPresent()
orElse(T)
orElseGet(Supplier<T>)
汇聚
收集流元素
Collectors
toSet()
toList()
collect(Collector<T,A,R>)
sum()
min()
min(Comparator<T>)
max()
max(Comparator<T>)
count()
average()
summaryStatistics()
副作用操作
ForEach(Consumer<T>)
ForEachOrdered(Consumer<T>)
终止流:收集与汇聚
收集
收集是针对流元素中的值总结到单个对象中
汇聚
汇聚指的是返回单个值的操作,它通过某种方式总结了流的元素的值
收集器
预定义收集器
分类
积聚到框架提供的容器中
积聚到自定义的集合中
将元素积聚到分类Map中
toSet
toList
toMap
<M extends Map<K,U>> toMap(Funciton<T,K>) keyExtractor,Function<T,U> valueExtracter,BinanryOperatory<U>mergeFunction, Supplier<M>MapFactory Collector<T,?,M>)
joining
joining()
joinning(CahrSequence)
joinning(CahrSequence, CahrSequence, CahrSequence)
groupBy(Fuction<T,K>)
partitioningBy(Predicate<T>)
组合收集器
上游收集器:groupingBy(Funciton<T,K>,Collector<T,A,D>)
下游收集器:
maxBy、minBy
counting
summingInt、summingLong summingDouble
summarizingInt、 summaringzingLong、 summaringzingfDouble
mapping(Function<T,U>,Collector<U,A,R>)
链接管道
管道概念:对流根据某种规则进行处理的的过程
剖析收集器
并发收集
编写收集器
提供器
积聚器
组合器
完成器
汇聚
对原生值的汇聚
对引入流的汇聚
来组合收集器
起始流:源与分割迭代器
创建流
Stream
of
empty
iterate(T,UnaryOperator<T>)
generatre(Supplier<T>)
concat(Stream<T>,Stream<T>)
intStream
range(int,int)
rangeClose(int,int)
源
Arrays
stream(T[])
stream(T[],int,int)
stream(int[])
stream(int[],int,int)
stream(long[])
。。。
BufferedReader
lines()
Files
walk(Path,FIleVisitOption...)
walk(Path,int,FileVisitOption...)
find(Path,int,.....)
list(Path)
lines(Path path, Charset cs)
lines(Path path)
Pattern
splitAsStream(CaharSequence)
JarFile
stream()
ZipFile
stream
CahrSquence
codePoints()
chars()
BistSet
stream()
Random/SplittableRandom
ints(),ints(int,int),ints(long),ints(long,int,int),longs().....doubles().......
分割迭代器与Fork/Join
fork/join框架
ForkJoinTask
ForkJoinPool
数据访问器
分割
Spliterator
trySplit
分割自身,在自身与新的Spliterator之间划分shuju
tryAdvance
将Iterator的方法next和hasNext的功能结合到了一起
forEacheRemaining
提供了一种分块遍历的机制,在tryAdvence基础上提升了性能
estimateSize
返回分割迭代器做涵盖的元素的一个数量估计值
charaterisitics
返回该分割迭代器的特性结合
迭代
来自分割迭代器的流
StreamSupport
接受一个Spliterator方法创建引用流或是原生子类型流
异常
递归grep
流的性能
微基准度量
目标是发现具体代码片段的执行代价
度量动态运行时
热身效应
经过多次运行代码后,JVM将代码直接解释生成字节码作为热点作为本地代码
无用代码消除DCE
编译器优化技术
垃圾收集
Java MIcrobenchmarking Harness微基准测试框架
旨在避免微基准度量存在的陷阱
试验方法
统计
开放同行评审
选择执行模式
执行上下文
工作负荷
分割迭代器与收集器性能
流的特性
SORTED
流中的元素是自然排序的
SIZED
流中的元素数量确定并且已知
DISTINCT
流中元素唯一,不重复
排序
有状态操作和无状态操作
装箱和拆箱
分割迭代器性能
收集器的性能
并发Map的合并
性能分析:对点进行分组
使用默认方法演化API
应用
应用2
0 条评论
下一页