Java8【有与无】参考表

表C-1-1 Java 8中的常用函数式接口
函数式接口函数描述符原始类型特化
Predicate<T> T->booleanIntPredicate,LongPredicate, DoublePredicate
Consumer<T>T->voidIntConsumer,LongConsumer, DoubleConsumer
Function<T,R>T->RIntFunction<R>,
IntToDoubleFunction,
IntToLongFunction,
LongFunction<R>,
LongToDoubleFunction,
LongToIntFunction,
DoubleFunction<R>,
ToIntFunction<T>,
ToDoubleFunction<T>,
ToLongFunction<T>
Supplier<T>()->TBooleanSupplier,IntSupplier, LongSupplier,
DoubleSupplier
UnaryOperator<T>T->TIntUnaryOperator,
LongUnaryOperator,
DoubleUnaryOperator
BinaryOperator<T>(T,T)->TIntBinaryOperator,
LongBinaryOperator,
DoubleBinaryOperator
BiPredicate<L,R>(L,R)->boolean 
BiConsumer<T,U> (T,U)->voidObjIntConsumer<T>,
ObjLongConsumer<T>,
ObjDoubleConsumer<T>
BiFunction<T,U,R>(T,U)->RToIntBiFunction<T,U>,
ToLongBiFunction<T,U>,
ToDoubleBiFunction<T,U>

 

表C-1-2 成员变量、局部变量和静态变量的区别
 成员变量局部变量静态变量(类变量
定义位置 类中、方法外方法中或方法形式参数类中、方法外
初始化默认初始值无默认初始值,需赋值后才能使用默认初始值
调用方式对象调用/对象调用或类名调用
存储位置方法区
生命周期对象共存亡与方法共存亡与类共存亡
C-1-3 流-中间操作
操 作类 型返回类型  操作参数  函数描述符
filter中间Stream<T>Predicate<T>T -> boolean
map中间Stream<R>Function<T, R>  T -> R
limit中间Stream<T>  
sorted中间Stream<T>Comparator<T>(T, T) -> int
distinct中间Stream<T>  
C-1-4 流-终端操作
操 作类 型目 的
forEach终端消费流中的每个元素并对其应用 Lambda。这一操作返回 void
count终端返回流中元素的个数。这一操作返回 long
collect终端把流归约成一个集合,比如 List 、 Map 甚至是 Integer 。
C-1-5 流-中间操作和终端操作
操 作类 型返回类型  使用的类型/函数式接口 函数描述符类别
filter中间Stream<T>Predicate<T>T -> boolean筛选和切片
distinct中间(有状态-无界)Stream<T>  筛选和切片
skip 中间(有状态-有界)Stream<T>long 筛选和切片
limit中间(有状态-有界)Stream<T>long 筛选和切片
map中间Stream<R>Function<T, R>T -> R映射
flatMap  中间Stream<R>Function<T, Stream<R>>T -> Stream<R>映射
sorted中间(有状态-无界)Stream<T> Comparator<T> (T, T) -> int 
anyMatch 终端booleanPredicate<T>T -> boolean查找和匹配[短路]
noneMatch终端booleanPredicate<T>T -> boolean查找和匹配[短路]
allMatch终端booleanPredicate<T>T -> boolean查找和匹配[短路]
findAny终端Optional<T>  查找和匹配[短路]
findFirst终端Optional<T>  查找和匹配[短路]
forEach  终端voidConsumer<T>  T -> void 
collect终端RCollector<T, A, R>  
reduce终端(有状态-有界)Optional<T>BinaryOperator<T>(T, T) -> T归约
count终端long   
表C-1-6 Collectors 类的静态工厂方法
工厂方法返回类型用 于
toListList<T>把流中所有项目收集到一个 List
使用示例: List<Dish> dishes = menuStream.collect(toList());
toSetSet<T>把流中所有项目收集到一个 Set ,删除重复项
使用示例: Set<Dish> dishes = menuStream.collect(toSet());
toCollection Collection<T>把流中所有项目收集到给定的供应源创建的集合
使用示例: Collection<Dish> dishes = menuStream.collect(toCollection(), ArrayList::new); 
countingLong 计算流中元素的个数
使用示例: long howManyDishes = menuStream.collect(counting());
summingIntInteger 对流中项目的一个整数属性求和
使用示例: int totalCalories = menuStream.collect(summingInt(Dish::getCalories));
averagingIntDouble 计算流中项目 Integer 属性的平均值
使用示例: double avgCalories = menuStream.collect(averagingInt(Dish::getCalories));
summarizingInt IntSummaryStatistics收集关于流中项目 Integer 属性的统计值,例如最大、最小、总和与平均值
使用示例: IntSummaryStatistics menuStatistics = menuStream.collect(summarizingInt(Dish::getCalories));
joiningString连接对流中每个项目调用 toString 方法所生成的字符串
使用示例: String shortMenu = menuStream.map(Dish::getName).collect(joining(", "));
maxByOptional<T>一个包裹了流中按照给定比较器选出的最大元素的 Optional ,或如果流为空则为 Optional.empty()
使用示例: Optional<Dish> fattest = menuStream.collect(maxBy(comparingInt(Dish::getCalories)));
minBy  Optional<T>一个包裹了流中按照给定比较器选出的最小元素的 Optional ,或如果流为空则为 Optional.empty()
使用示例: Optional<Dish> lightest = menuStream.collect(minBy(comparingInt(Dish::getCalories)));
reducing归约操作产生的类型从一个作为累加器的初始值开始,利用 BinaryOperator 与流中的元素逐个结合,从而将流归约为单个值
使用示例: int totalCalories = menuStream.collect(reducing(0, Dish::getCalories, Integer::sum));
collectingAndThen转换函数返回的类型包裹另一个收集器,对其结果应用转换函数
使用示例: int howManyDishes = menuStream.collect(collectingAndThen(toList(), List::size));
groupingByMap<K, List<T>>根据项目的一个属性的值对流中的项目作问组,并将属性值作为结果 Map 的键
使用示例: Map<Dish.Type,List<Dish>> dishesByType = menuStream.collect(groupingBy(Dish::getType));
partitioningByMap<Boolean,List<T>>根据对流中每个项目应用谓词的结果来对项目进行分区
使用示例: Map<Boolean,List<Dish>> vegetarianDishes = menuStream.collect(partitioningBy(Dish::isVegetarian));
表C-1-7 流的数据源和可分解性
可分解性
ArrayList极佳
LinkedList
IntStream.range极佳
Stream.iterate
HashSet
TreeSet
表C-1-8 分支/合并框架-Spliterator 的特性
特 性  含 义
ORDERED元素有既定的顺序(例如 List ),因此 Spliterator 在遍历和划分时也会遵循这一顺序
DISTINCT对于任意一对遍历过的元素 x 和 y , x.equals(y) 返回 false
SORTED遍历的元素按照一个预定义的顺序排序
SIZED该 Spliterator 由一个已知大小的源建立(例如 Set ),因此 estimatedSize() 返回的是准确值
NONNULL保证遍历的元素不会为 null
IMMUTABLESpliterator 的数据源不能修改。这意味着在遍历时不能添加、删除或修改任何元素
CONCURRENT该 Spliterator 的数据源可以被其他线程同时修改而无需同步
SUBSIZED该 Spliterator 和所有从它拆分出来的 Spliterator 都是 SIZED
表C-1-9 Optional 类的方法
方 法描 述
empty返回一个空的 Optional 实例
filter如果值存在并且满足提供的谓词,就返回包含该值的 Optional 对象;否则返回一个空的Optional 对象
flatMap如果值存在,就对该值执行提供的mapping函数调用,返回一个 Optional 类型的值,否则就返回一个空的 Optional 对象
get如果该值存在,将该值用 Optional 封装返回,否则抛出一个 NoSuchElementException 异常
ifPresent如果值存在,就执行使用该值的方法调用,否则什么也不做
isPresent如果值存在就返回 true ,否则返回 false
map如果值存在,就对该值执行提供的 mapping函数调用
of将指定值用 Optional 封装之后返回,如果该值为 null ,则抛出一个 NullPointerException异常
ofNullable将指定值用 Optional 封装之后返回,如果该值为 null ,则返回一个空的 Optional 对象
orElse如果有值则将其返回,否则返回一个默认值
orElseGet如果有值则将其返回,否则返回一个由指定的 Supplier 接口生成的值
orElseThrow如果有值则将其返回,否则抛出一个由指定的 Supplier 接口生成的异常
表C-1-10 多线程并发方案
描述FutureFutureTaskCompletionServiceCompletableFuture
原理Future接口接口RunnableFuture的唯一实现类,RunnableFuture接口继承自Future+Runnable内部通过阻塞队列+FutureTask接口JDK8实现了Future, CompletionStage两个接口
多任务并发执行支持支持支持支持
获取任务结果的顺序按照提交顺序获取结果未知支持任务完成的先后顺序支持任务完成的先后顺序
异常捕捉自己捕捉自己捕捉自己捕捉原生API支持,返回每个任务的异常
建议CPU高速轮询,耗资源,可以使用,但不推荐功能不对口,并发任务这一块多套一层,不推荐使用推荐使用,没有JDK8CompletableFuture之前最好的方案,没有质疑API极端丰富,配合流式编程,速度飞起,推荐使用!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琴 韵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值