|
《Java8函数式编程之Function》场景:可以应用在计算逻辑中 java代码4 I5 d6 w; l' w. p2 _
$ V' w' M7 ]6 W4 z7 k: o" W6 s$ h部分java源码:
: d3 c! |4 K, s, t6 v/ ?: U1、
& v) L9 C1 N4 K1 Rpackage com.javazx.jdk8;5 o# P' _' u) U t' t
" G7 M2 E. N9 x
import java.util.function.BiFunction;! O& p8 N4 U: O, |4 T
import java.util.function.Function;
8 h& Y: Z! t& M, w
3 ~# F5 ^ X+ Q/**
3 T2 u6 H8 {9 s8 | * @author: itmrchen
& h1 P6 J q; a2 B: d6 l1 d) k * @Description: Function中的compose和andThen两个方法的使用
; O- \) x& e7 h$ J9 o* i * 如果是两个参数一个输出则用BiFunction
& l- R3 }$ n( n' R3 @ * @date 2019/8/6 0:16
1 y: ~ l5 |, m' e( A2 ]: X ]& o( H */
8 l. R, x' p* [3 _public class FunctionTest2 {
5 K$ C9 Q, J# Y, m public static void main(String[] args) {
4 C2 N" u$ k) f4 b, X FunctionTest2 functionTest = new FunctionTest2();
. _0 m1 U) V u4 e$ A g System.out.println(functionTest.compute(2, value -> value * 3, value -> value * value));
k& D# k- Q* H6 }: ` h2 b System.out.println(functionTest.compute2(2, value -> value - 3, value -> value * value));
5 x( w! [$ @0 L9 n: D2 ] x4 J u. f, b: X: |
System.out.println(functionTest.compute3(2, 3, (value1, value2) -> value1 + value2));6 T4 A; j, M* H9 u3 b
) V6 Z( d3 Z8 A2 }4 d* X
System.out.println(functionTest.compute4(2, 3, (value1, value2) -> value1 + value2, value -> 2 * value));
+ d( j. \( ]/ e) M5 J8 M( ~+ ?
}# p6 J' x, D7 r, o! B
# c+ K" ?/ l8 J; z p- I# z3 Q /**1 B5 ?6 I- m d: v
* 先计算function2 再将结果与function1运算, F/ M" g+ T' [3 v s* @
*
& c( a2 o/ y6 v2 e8 s+ w * @param a: G0 K F \% X( V$ e& a# ]; C
* @param function1- J5 s% D( k* _2 ~" y, I
* @param function2
( l/ i& R G) q* H' n, d6 H * @return [- d4 x- X) Y& ?! [7 J& x c. |
*/
+ q6 |, l( Z7 @2 {" _+ k9 V public int compute(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {
( i; Z' H. r8 }, N# A return function1.compose(function2).apply(a);! _4 s* q8 A: O2 P/ U7 o3 I
}
" a9 c. d. j( L ]9 G9 I4 } P F4 ~( O9 I S
/**# ?5 V2 a3 ` Y. _% Q- K
* 先计算function1 再将结果与function2运算
w/ i1 l: z3 \6 L% V5 D *' H. v$ [+ Y/ d
* @param a/ `: P. o( E- b6 T7 ^3 o. d9 A8 y
* @param function1
( ?7 g- w7 L/ [3 P * @param function2
% C) I. A7 Q4 L# e! b: U' m * @return
; ]. C* E5 X7 K+ a5 G! u' W */
7 ]* H1 Y: V P$ B$ t5 j; Z public int compute2(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {
3 W! K( i8 W( S! H' v return function1.andThen(function2).apply(a);
5 V0 F8 @4 p- a' L- ] }
9 b& D* S7 [. ?
, O% k5 B' `' j# R1 A$ F /**
' A- d7 b0 D0 V: y * 具体操作由调用者决定9 d2 h9 z$ \0 i+ ~
*
U- b! u7 f$ b9 a$ u# E * @param a8 V b% T) J7 _5 X X) q
* @param b
_5 i `" L6 D5 U" L+ t6 E$ \: ` * @param function9 q0 r3 {. Y( F2 w9 W
* @return! X9 s5 t' e; U' e. E# u# E2 k
*/* E: M8 ]0 J1 ~
public int compute3(int a, int b, BiFunction<Integer, Integer, Integer> function) {& p6 [4 n: i& _1 V$ B7 ?; I4 P1 N
return function.apply(a, b);3 p7 h2 c/ k. t; I4 c( N; V
}( b3 u! {; L& _2 k9 ]; N
0 R) s, {' h7 _1 d5 `- l
/** U s" m% G: F' B5 a4 W% b
* @param a
# {/ T8 ?0 e0 k9 v/ ~2 [1 \ * @param b. t, d* A6 I" K
* @param biFunction
6 {4 m; o. F, L5 ~* ^/ d * @param function
, I+ E+ b Y: y * @return8 L d+ b3 M) B) D/ o+ r) M; L" L
*/
; ^: p1 N" t2 X# E$ ]% Q public int compute4(int a, int b, BiFunction<Integer, Integer, Integer> biFunction, Function<Integer, Integer> function) {$ q: h; O$ }, ], P! _* U; h- g
return biFunction.andThen(function).apply(a, b);
4 [- G, B( e0 R( M7 n9 C# T8 L }/ w d2 f0 F; _! Q# E
, ~' g1 Y8 v8 N5 Q& \# J
7 O1 H' w3 z" K}. r, D" ^$ [0 B; |3 ?) ~' K# i
, w. T* J. E3 m/ I4 J
2 Q6 X! N" ]: w7 Z$ q; m
# V) M, f, F/ x2 i
* H6 H8 U$ @' q( e! D; C
; _/ D) r6 |( `; Ngithub地址:https://github.com/itmrchen/java8位置在 java8\src\main\java\com\javazx\jdk8\FunctionTest.java FunctionTest2.java
0 ~ g) F0 n9 k% @7 ~5 d, F6 J! j, c- y" `" J% g5 b
2 M& w7 X* ]5 ?) F B" F0 U. p
5 C/ {; b* i* `! b% Y( |$ i8 r: m: T( s' ?) R1 Y& o
2 [5 Z% q" W0 Y, C, G ~, o$ Y
|
|