Java 8 In Action之常用函数式接口,中间操作和终端操作及Collectors类的静态工厂方法表

表3-1    Java 8中的常用函数式接口

函数式接口

函数描述符

原始类型特化

Predicate<T>

T->boolean

IntPredicate,LongPredicate, DoublePredicate

Consumer<T>

T->void

IntConsumer,LongConsumer, DoubleConsumer

Function<T,R>

T->R

IntFunction<R>,

 

IntToDoubleFunction,

IntToLongFunction,

LongFunction<R>,

LongToDoubleFunction,

LongToIntFunction,

DoubleFunction<R>,

ToIntFunction<T>,

ToDoubleFunction<T>,

ToLongFunction<T>

Supplier<T>  ()->T BooleanSupplier,IntSupplier, LongSupplier,
  DoubleSupplier
UnaryOperator<T>  T->T IntUnaryOperator
  LongUnaryOperator
DoubleUnaryOperator
BinaryOperator<T>  ( T,T)->T IntBinaryOperator
  LongBinaryOperator
DoubleBinaryOperator
BiPredicate<L,R> (L,R)->boolean  
BiConsumer<T,U> (T,U)->void ObjIntConsumer<T>
  ObjLongConsumer<T>
ObjDoubleConsumer<T>
BiFunction<T,U,R> (T,U)->R ToIntBiFunction<T,U>
  ToLongBiFunction<T,U>
ToDoubleBiFunction<T,U>

表3-2    Java 8中间操作和终端操作

操  作

类  型

返回类型

使用的类型/函数式接口

函数描述符

filter

中间

Stream<T>

Predicate<T>

T -> boolean

distinct

中间

(有状态-无界)

Stream<T>

 

 

skip

中间

(有状态-有界)

Stream<T>

long

 

limit

 

 

map

中间 (有状态-有界) 中间

Stream<T>

 

Stream<R>

long

 

 

Function<T, R>

T -> R

flatMap

中间

Stream<R>

Function<T, Stream<R>>

T -> Stream<R>

sorted

 

 

anyMatch

中间 (有状态-无界) 终端

Stream<T>

 

 

boolean

Comparator<T>

 

 

Predicate<T>

(T, T) -> int

 

 

T -> boolean

noneMatch

终端

boolean

Predicate<T>

T -> boolean

allMatch

终端

boolean

Predicate<T>

T -> boolean

findAny

终端

Optional<T>

 

 

findFirst

终端

Optional<T>

 

 

forEach

终端

void

Consumer<T>

T -> void

collect

终端

R

Collector<T, A, R>

 

reduce

终端

(有状态-有界)

Optional<T>

BinaryOperator<T>

(T, T) -> T

count

终端

long

 

 

表3-3    Java 8中的Collectors类的静态工厂方法表

工厂方法

返回类型

用    于

toList

List<T>

把流中所有项目收集到一个 List

使用示例:List<Dish> dishes =

menuStream.collect(toList());

toSet

Set<T>

把流中所有项目收集到一个 Set,删除重复项

使用示例:Set<Dish> dishes =

menuStream.collect(toSet());

toCollection

Collection<T>

把流中所有项目收集到给定的供应源创建的集合

使用示例:Collection<Dish> dishes =

menuStream.collect(toCollection(),ArrayList::new);

Long counting 计算流中元素的个数

使用示例:long howManyDishes =

menuStream.collect(counting());

summingInt

Integer

对流中项目的一个整数属性求和

使用示例:int totalCalories =

menuStream.collect(summingInt(Dish::getCalories));

averagingInt

Double

计算流中项目 Integer 属性的平均值

使用示例:double avgCalories =

menuStream.collect(averagingInt(Dish::getCalories));

 

summarizingInt

 

IntSummaryStatistics

收集关于流中项目 Integer 属性的统计值,例如最大、最小、 总和与平均值

使用示例:IntSummaryStatistics menuStatistics =

menuStream.collect(summarizingInt(Dish::getCalories));

joining`

String

连接对流中每个项目调用 toString 方法所生成的字符串

使用示例:String shortMenu = 

menuStream.map(Dish::getName).collect(joining(", "));

maxBy

Optional<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));

 

groupingBy

 

Map<K, List<T>>

根据项目的一个属性的值对流中的项目作问组,并将属性值作 为结果 Map 的键

使用示例:Map<Dish.Type,List<Dish>> dishesByType =

menuStream.collect(groupingBy(Dish::getType));

partitioningBy

Map<Boolean,List<T>>

根据对流中每个项目应用谓词的结果来对项目进行分区

使用示例:Map<Boolean,List<Dish>> vegetarianDishes =

menuStream.collect(partitioningBy(Dish::isVegetarian));

猜你喜欢

转载自blog.csdn.net/weixin_41126303/article/details/81090278