持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
上一篇文章我们讲了Supplier 接口的概念和使用,这篇文章我们介绍UnaryOperator 接口。
UnaryOperator 接口
unary 的中文意思是“一元的”;operator 中文意思是“操作员;运算符号”。
所以这个接口的直观含义就是“一元”。
UnaryOperator是Function 的扩展,因此它接受输入参数。我们来看它的接口定义:
@FunctionalInterface
public interface UnaryOperator<T> extends Function<T, T> {
static <T> UnaryOperator<T> identity() {
return t -> t;
}
}
UnaryOperator 接口扩展了java.util.function.Function 接口。 UnaryOperator 接口表示一个操作,它接受一个参数并返回一个与其输入参数相同类型的结果。
也就是说UnaryOperator 用于处理单个操作数,它返回与操作数相同的类型。
UnaryOperator 可以用于lambda 表达式,并作为参数进行传递。
使用举例
由于UnaryOperator 接口继承了Function 接口,所以UnaryOperator 也具有Function 的其他函数的特性。
示例1
我们首先看它的基本使用:
public static void main(String[] args) {
UnaryOperator<Integer> unaryOperator1 = i -> i * i;
System.out.println(unaryOperator1.apply(3));
}
如上,输出加过就是9。
示例2
使用andThen 和compose 方法:
public static void main(String[] args) {
UnaryOperator<Integer> unaryOperator = i -> i * i;
UnaryOperator<Integer> unaryOperator1 = i -> i += 10;
// 使用andThen 方法
int result = unaryOperator.andThen(unaryOperator1).apply(10);
System.out.println(result);
// 使用compose 方法
int result1 = unaryOperator.compose(unaryOperator1).apply(10);
System.out.println(result1);
}
输出结果为分别为:110,400。
可见,这个接口的作用和Function 的区别就是UnaryOperator 的输入输出都是相同的类型,也就是其表面含义“一元”所在。
总结
其实在公司的项目中,我市场可以见到这个接口的使用。在不熟悉函数式接口的使用的时候,看到这些代码我都是一脸懵,感觉无从下手的感觉,在看代码的时候只能硬着头皮按照自己的主观想法看下去。但是其实做技术一定不能靠猜,更不能靠主观臆断,如果有不懂的地方一定要提前弄清楚,这样我们在看代码的时候才会“事半功倍”,同时如果多次遇到相似的代码案例,我们反而会更加深刻地区理解它。相反,如果我们不能做到提前学习相关的知识,在我们阅读别人的代码的时候,一定会磕磕绊绊,还会浪费很多时间,这样是得不偿失的。