|
《Java8函数式编程之Function》场景:可以应用在计算逻辑中 java代码
1 A" `- C1 w) a' v4 ] E
|+ T3 e- ?! u, f2 I; x( E部分java源码:; c1 ~* T4 j0 p, R9 O* o
1、
& n' R! Q, X, R# N2 u V" f; hpackage com.javazx.jdk8;
9 y3 p3 v+ V# C2 A, l* {- Z0 D0 W A' g1 V) d
import java.util.function.BiFunction;5 [0 M9 E- M3 X' M; R4 B5 o+ n
import java.util.function.Function;
. E6 i6 ?. w. c
2 c; \) m- @5 X" v, @/**! t. b- t2 d& {* X( f. j" F
* @author: itmrchen
1 T9 W% o0 [( l% d2 e * @Description: Function中的compose和andThen两个方法的使用
3 c. D* y9 _; T% ` * 如果是两个参数一个输出则用BiFunction
" H! ]; z) U4 x$ Y) L) Z9 s * @date 2019/8/6 0:169 Q0 D- W/ G* Y" A3 y
*/8 v/ u- E9 }! {3 Q: I
public class FunctionTest2 {
& A# r" j, T/ N1 t public static void main(String[] args) {' q( M( o' H' B* |8 f
FunctionTest2 functionTest = new FunctionTest2();8 C: ?7 n' d' N# v4 K0 _+ P
System.out.println(functionTest.compute(2, value -> value * 3, value -> value * value));
8 @+ o) u! b4 P" W System.out.println(functionTest.compute2(2, value -> value - 3, value -> value * value));" e- d2 u, i! Z/ k$ K' O& A8 D- X
* n1 S9 o6 w: }! f( t6 I
System.out.println(functionTest.compute3(2, 3, (value1, value2) -> value1 + value2));$ T& G3 F. S5 p2 a! V; [! q
1 [0 m7 B3 Y1 G c
System.out.println(functionTest.compute4(2, 3, (value1, value2) -> value1 + value2, value -> 2 * value)); K1 M! c$ X0 m# y) ^
, ~- h& Y/ {& O- w. e5 i& U2 h }
^& g8 O K8 u7 P! K. K3 d6 u
7 H2 f- Z. c9 N. v7 x' ?, E /**1 v+ T! l9 T) N+ J) r& [+ G, T+ R" y
* 先计算function2 再将结果与function1运算2 w, O. D2 t$ V
*
* C0 L! G/ v4 X( n o. y * @param a, A: r3 k9 _" z$ z. P2 D0 L
* @param function1
$ Q, {! P- z5 e" a. s& g * @param function2; x3 I# ?3 U, Q+ x
* @return
! g0 Q6 l( Y: K- M9 G7 s& Z0 R0 R */! L3 Y6 W5 [& ?% h3 X" F/ L2 p2 k
public int compute(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {6 k# i$ w% l3 T; i8 s3 H* g
return function1.compose(function2).apply(a);
2 n' r' B# K( t } l9 C. e. A' C% @6 @
7 U& p0 h: M# G5 O2 M
/**
0 T5 c& B2 F* u7 a * 先计算function1 再将结果与function2运算
4 j% j: Q+ p. ^' ]( E8 @6 H- B *, j( F# A/ _) a, k% H: F1 G
* @param a
/ w4 m( P! I9 _, }2 D * @param function1
) z! u" r* O/ F! k7 t9 |& O+ b * @param function29 I& @' b8 D6 y
* @return$ t% `: W* D0 k6 B
*/6 {5 x. P2 }7 D, j I7 S, K% g& q
public int compute2(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {; O$ W, L- @* h9 T2 k& a, x
return function1.andThen(function2).apply(a);
- H3 J! k2 G0 Z" x0 ?( Y }% B% C/ U2 k5 ~4 e( m" I
' a. [4 K3 w7 I/ b# j8 B: H0 T /**3 c* |1 \9 O' I) J2 A
* 具体操作由调用者决定
/ Q0 a+ b- ^5 }3 J& y+ M *
7 I7 |, [4 A# Z* C; f5 ? * @param a5 ?, Q8 D4 } v/ I- @0 H
* @param b
; d! W6 \& B7 N0 ?1 o * @param function
5 _ K( B' G& }* }. ?( ~ * @return; q# F8 S8 M0 w: `
*/
5 D; G9 Y& J/ U public int compute3(int a, int b, BiFunction<Integer, Integer, Integer> function) {
7 g8 k- q$ V* q- H9 z7 f return function.apply(a, b);
$ U+ R+ F; T6 a }8 F6 t$ t: X7 F8 I4 O! s D8 i
% w# \0 H: ~+ p. \6 F/ U2 \8 u5 X /**) W7 [% [- @, w0 Z) r- M
* @param a# m# _/ V: a2 a
* @param b
+ Z# Y" x+ B0 K, ]8 m. v * @param biFunction
. ]0 j+ z7 D6 k! |( {9 A" X8 u% } * @param function# K0 g- _; f! J" q" P4 H1 F
* @return* E1 w, i" P4 c: j0 r# _( x0 q
*/* L. Z. r4 J% Q! {/ p
public int compute4(int a, int b, BiFunction<Integer, Integer, Integer> biFunction, Function<Integer, Integer> function) {* ?0 `# F. B' V6 v7 y7 f- ~: n
return biFunction.andThen(function).apply(a, b);. _* a6 K( S- z! h$ Z" l
}- S1 Z) t' y. s8 e
$ I. l- i' O/ p! I% b$ o/ ~
# \1 [0 C2 w8 r5 [8 V- k
}0 e( w6 i7 w3 p: H# _0 A
4 F7 t3 ]+ _; @* i$ R( V) N9 k) p* w
# f4 P2 x9 j: y$ z! I* L
7 F# d; |; Y* H; ?1 {$ i
- Y& M2 |# H6 P" K9 ]' r
9 _8 [: h7 |9 e1 }github地址:https://github.com/itmrchen/java8位置在 java8\src\main\java\com\javazx\jdk8\FunctionTest.java FunctionTest2.java
. O$ x8 \4 E" @/ ~) M, y
# D& ~- b( |3 h! M5 f8 w1 A0 j& Q* C0 x; [$ R+ }6 I
6 T, ^8 i/ u% |& @& h1 S
. ?' F; F( h Z7 `
/ w% P3 k$ s% P" M
|
|