欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > java 函数式编程

java 函数式编程

2025/4/27 10:03:30 来源:https://blog.csdn.net/u012116089/article/details/147529485  浏览:    关键词:java 函数式编程

常见函数式编程接口有:Function、Consumer、Predicate、Supplier、UnaryOperator等。

1、Function源码如下:

需要实现的只有一个接口: R apply(T var1);  该接口传一个T类型参数,返回一个R类型数据。数据转换可以用这个接口。

另外compose接口接受一个Function参数,最后又构造了一个Function对象。作用是将该Function组合另一个Function(即参数before),然后按照顺序先调用before的apply方法,用其返回值再调用当前Function的apply方法。这样就形成链式调用。

另一个接口andThen, 也是组合Function,构造一个新的Function,按顺序链式调用原来各个Function的apply方法。

测试代码:

static void testFunction() {Function<Integer, String> func = new Function<Integer, Integer>() { // 数据转化。 可组合成链式调用@Overridepublic Integer apply(Integer integer) {return integer + 1;}}.andThen(new Function<Integer, String>() {@Overridepublic String apply(Integer integer) {return "hello " + integer;}});System.out.println(func.apply(9526));}

打印:hello 9527

2、 Consumer接口源码如下:

和Function的区别在于,其accept函数接受一个T类型参数,但没有返回值。说明不关心返回值。Consumer也支持组合,接口andThen可以将多个Consumer组合起来,实现链式调用。代码略。

3、Predicate接口源码如下:

这些接口都返回bool值,可以用于条件判断,支持多个组合起来。调用test方法判断是否满足条件。

测试代码:

static void testPredicate() {Predicate<Integer> predicate = new Predicate<Integer>() {@Overridepublic boolean test(Integer integer) {return integer >= 18;}}.and(new Predicate<Integer>() {@Overridepublic boolean test(Integer integer) {return integer < 30;}});int age = 18;System.out.println(String.format("%d岁的女性是%s", age, predicate.test(age) ? "少女": "小女孩或大龄女性"));}

打印结果如下:

ok

4、Supplier,代码很简单:

public interface Supplier<T> {T get();
}

不传参,用于获取一个T类型数据。

5、UnaryOperator, 继承Function,输入值和输出值都是同样的类型。

总结:除去上面的这些接口介绍,还有BiFunction, BiPredicate接口,类似于Function、Predicate, 但是参数有俩个。链式调用有助于避免代码调用太深,优化代码结构。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词