packagecom;importjava.util.function.BiFunction;importjava.util.function.Function;public classDemoFunction {public static voidmain(String[] args) {
DemoFunction t1= newDemoFunction();//Function函数的使用
Integer addResult = t1.compute(3, value -> value +value);
System.out.println("加法结果:" +addResult);
Integer subResult= t1.compute(3, value -> value - 1);
System.out.println("减法结果:" +subResult);
Integer multipResult= t1.compute(3, value -> value *value);
System.out.println("乘法结果:" +multipResult);
Integer divisionResult= t1.compute(6, value -> value / 3);
System.out.println("除法结果:" +divisionResult);//使用compose场景, 从右向左处理, 这里就是 (6 * 6) + 10 = 46
Integer composeResult = t1.computeForCompose(6,
value-> value + 10,
value-> value *value);
System.out.println("Function compose 结果:" +composeResult);//使用andThen场景, 从左向右处理, 这里就是(3 + 20) - 10 = 13
Integer andThenResult = t1.computeForAndThen(3,
value-> value + 20,
value-> value - 10);
System.out.println("Function andThen 结果:" +andThenResult);//使用 BiFunctioin场景, 这里是 2 + 3 = 5
Integer biFuncResult = t1.computeForBiFunction(2, 3,
(v1, v2)-> v1 +v2);
System.out.println("BiFunction 结果:" +biFuncResult);//使用 BiFunctioin andThen场景, 这里是 (2 * 3) + 6 = 12
Integer biFuncAndThenResult = t1.computeForBiFunctionAndThen(2, 3,
(v1, v2)-> v1 * v2, v1 -> v1 + 6);
System.out.println("BiFunction andThen 结果:" +biFuncAndThenResult);
}/***@paramnum
*@paramfunction
*@return* @desc 使用JDK8 Function函数*/
private Integer compute(Integer num, Functionfunction) {
Integer result=function.apply(num);returnresult;
}/***@paramnum
*@paramfunction1
*@paramfunction2
*@return* @desc 使用compose函数,简单的说,就是从右向左处理。*/
privateInteger computeForCompose(Integer num,
Functionfunction1,
Functionfunction2) {returnfunction1.compose(function2).apply(num);
}/***@paramnum
*@paramfunction1
*@paramfunction2
*@return* @desc 使用andThen函数,简单的说,就是从左向右处理。*/
privateInteger computeForAndThen(Integer num,
Functionfunction1,
Functionfunction2) {returnfunction1.andThen(function2).apply(num);
}/***@paramnum1
*@paramnuum2
*@parambiFunction
*@return* @desc 使用BiFunction*/
privateInteger computeForBiFunction(Integer num1, Integer num2,
BiFunctionbiFunction) {returnbiFunction.apply(num1, num2);
}/***@paramnum1
*@paramnum2
*@parambiFunction
*@paramfunction
*@return* @desc 使用BiFunction andThen方法*/
privateInteger computeForBiFunctionAndThen(Integer num1, Integer num2,
BiFunctionbiFunction,
Functionfunction) {returnbiFunction.andThen(function).apply(num1, num2);
}
}