本文共 1964 字,大约阅读时间需要 6 分钟。
可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它
有参数列表、函数主体、返回类型。先前:
ComparatorbyWeight = new Comparator () { public int compare(Apple a1, Apple a2){ return a1.getWeight().compareTo(a2.getWeight()); }};
之后(用了Lambda表达式):
ComparatorbyWeight = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());
Lambda表达式有三个部分。
参数列表——如Comparator中compare方法的参数,两个Apple。 箭头——箭头->把参数列表与Lambda主体分隔开。 Lambda主体——比较两个Apple的重量。表达式就是Lambda的返回值了可以在函数式接口上使用Lambda表达式。函数式接口就是只定义一个抽象方法的接口。比如Comparator和Runnable。
java.util.function.Predicate<T>
接口定义了一个名叫test的抽象方法,它接受泛型
java.util.function.Consumer<T>
定义了一个名叫accept的抽象方法,它接受泛型T
java.util.function.Function<T, R>
接口定义了一个叫作apply的方法,它接受一个
java.util.function.Supplier<T>
,定义了一个叫作get的方法,它没有参数,返回泛型T对象。
函数式接口 | 函数描述符 | 原始类型特化 |
---|---|---|
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> |
转载地址:http://yphgi.baihongyu.com/