博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java8总结之函数式编程
阅读量:4291 次
发布时间:2019-05-27

本文共 1964 字,大约阅读时间需要 6 分钟。

Lambda表达式

可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它

有参数列表、函数主体、返回类型。

先前:

Comparator
byWeight = new Comparator
() { public int compare(Apple a1, Apple a2){ return a1.getWeight().compareTo(a2.getWeight()); }};

之后(用了Lambda表达式):

Comparator
byWeight = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());

Lambda表达式有三个部分。

 参数列表——如Comparator中compare方法的参数,两个Apple。
 箭头——箭头->把参数列表与Lambda主体分隔开。
 Lambda主体——比较两个Apple的重量。表达式就是Lambda的返回值了

函数式接口

可以在函数式接口上使用Lambda表达式。函数式接口就是只定义一个抽象方法的接口。比如Comparator和Runnable。

JDK中的函数式接口

Predicate ( 断言)

java.util.function.Predicate<T>接口定义了一个名叫test的抽象方法,它接受泛型

T对象,并返回一个boolean。这恰恰和你先前创建的一样,现在就可以直接使用了。

Consumer(消费者)

java.util.function.Consumer<T>定义了一个名叫accept的抽象方法,它接受泛型T

的对象,没有返回(void)。你如果需要访问类型T的对象,并对其执行某些操作,就可以使用
这个接口。比如,你可以用它来创建一个forEach方法,接受一个Integers的列表,并对其中
每个元素执行操作。

Function(函数-转换)

java.util.function.Function<T, R>接口定义了一个叫作apply的方法,它接受一个

泛型T的对象,并返回一个泛型R的对象。如果你需要定义一个Lambda,将输入对象的信息映射
到输出,就可以使用这个接口(比如提取苹果的重量,或把字符串映射为它的长度)。在下面的
代码中,我们向你展示如何利用它来创建一个map方法,以将一个String列表映射到包含每个
String长度的Integer列表。

Supplier(提供者)

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/

你可能感兴趣的文章
每一个程序员需要了解的10个Linux命令
查看>>
service的自调用 VS service之间调用
查看>>
Android权限管理之Permission权限机制及使用
查看>>
重识Retrofit
查看>>
PowerDesigner(数据建模)使用大全
查看>>
RadioButton与CheckBox_优就业
查看>>
java中的throw与throws的区别
查看>>
优化用户登录体验效果
查看>>
用js批量选中功能实现更改数据库中status状态值_优就业
查看>>
MySql表信息基础知识学习
查看>>
为什么document找到的不是html节点_优就业
查看>>
Javascript本地存储小结
查看>>
常用排序方法介绍
查看>>
Java异常分类和统一处理
查看>>
原 荐 cache线程池对数据库操作的饥饿问题
查看>>
使用Eclipse把java文件打包成jar 含有第三方jar库的jar包
查看>>
3种web会话管理的方式
查看>>
SSM(框架)-异常1:面向接口式编程异常
查看>>
Android蓝牙4.0之玩爆智能穿戴、家具(二)
查看>>
使用Condition实现多线程之间调用
查看>>