|
《Java8函数式编程之Function》场景:可以应用在计算逻辑中 java代码
' a1 q- r! A& e/ b$ t- | Z8 d* s
$ T6 n* \# m5 L部分java源码:
5 d+ Q- E6 {! _) z5 n! O5 G1、4 M' v0 l) s$ [3 ~- w$ P! F7 l
package com.javazx.jdk8;* y8 a* v4 D3 J* e4 q7 ?% h
1 p& u. t y2 m! g9 J Y+ Kimport java.util.function.BiFunction;& }5 d2 b- @3 a8 f
import java.util.function.Function;4 k( R6 U3 T3 U4 E
& I0 k* s4 x) J/**
% X$ p+ C j. P. J * @author: itmrchen
! O% q; z/ O6 ?" ^& F T3 I7 J! U( A * @Description: Function中的compose和andThen两个方法的使用$ T( P& k1 V5 b j
* 如果是两个参数一个输出则用BiFunction/ F! C8 v) D* D) K3 i) e' S
* @date 2019/8/6 0:16
2 F1 ]' s; t2 j1 c, n5 e4 W7 ^ */3 f7 _3 x3 X- X. O
public class FunctionTest2 {8 h+ T% B9 l: A6 W# D7 m
public static void main(String[] args) {
! I! r6 [6 _7 m! v/ S FunctionTest2 functionTest = new FunctionTest2();
7 k$ a T* ?# ]' [/ U System.out.println(functionTest.compute(2, value -> value * 3, value -> value * value));2 E D; d) h. J( A+ Z: t
System.out.println(functionTest.compute2(2, value -> value - 3, value -> value * value));; B* h( ^8 l' C2 V) v, ~# r) A$ {
; g& s8 g: H/ A, g( ~% ?' X! F
System.out.println(functionTest.compute3(2, 3, (value1, value2) -> value1 + value2));& O" ?: q7 O6 g, c+ h: P
- H# z: A6 D% p0 H& U% t# l, h( L System.out.println(functionTest.compute4(2, 3, (value1, value2) -> value1 + value2, value -> 2 * value));
3 p% m! d2 K8 {: ~
/ {0 K7 M; m* w$ W# K8 [% E# a }
8 Z+ u& I0 q9 Y/ C+ y! ^6 [& V
# w+ b# ]2 F% g# {( B) S /**
, K* G5 m5 S& r: c * 先计算function2 再将结果与function1运算3 Z- Z/ H' t* b" o
*
8 f- q; I$ F, U! ] * @param a
' g5 J5 Q2 X# { * @param function1
& q) R: x8 y% ]: { * @param function28 s( h% @+ B1 [4 L
* @return# h4 L% D4 |" |% L# {
*/" x* i* L) O$ Y! I9 `$ h
public int compute(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {2 z3 z5 c3 Z4 W& N/ M! O: ^3 {
return function1.compose(function2).apply(a);& z% A v( U# {; |, X
}+ F' g0 Q. i s+ l' {3 g
+ L. o4 A4 n( P7 w$ e
/**
6 z* J8 s2 B y' n0 x3 q * 先计算function1 再将结果与function2运算. x7 _& Y3 o, r9 I7 T* d% M
*
2 Y1 U3 U4 |* J3 @ * @param a
" M9 M# A- N6 r" [! _ * @param function1
5 h- `2 S) \1 a8 T$ {, P- k4 m% t * @param function25 ^" s. k, s: p
* @return
; g2 o9 w5 E2 U7 d( R */$ V! m4 M) S8 a
public int compute2(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {# Z" U2 D/ X: n2 I
return function1.andThen(function2).apply(a);
# D0 J ~3 W: l5 R }" b. e1 v- K/ P0 m" ^
( Z) E8 V% A( O$ N. G# e /**
. a* m0 ^- ?# |& d1 G0 B * 具体操作由调用者决定
; z$ \1 A0 d! _' m *
7 H3 g3 v8 P/ F& z: a * @param a/ n: o6 P/ r8 N% E4 X" M V ?
* @param b
8 k! t) q9 P/ q" W: N& }/ H( f: Y5 W% Y * @param function( W% {7 k5 ?4 g1 T
* @return
4 Q# K0 G' d, P/ i9 q4 V8 x4 V# o */) z3 \2 @; B% ]( H9 O- `) h
public int compute3(int a, int b, BiFunction<Integer, Integer, Integer> function) {
8 {) J1 ]/ \* y6 o0 N: ]9 R" X return function.apply(a, b);0 @; t" X* b2 H
}
- _- r! n# f7 y- f X* ?# K7 l) n6 P, _( s+ p
/**% D7 K6 P7 H: V4 {4 e" h0 u3 O
* @param a
& }2 o) f5 f; k9 t# i# f * @param b7 d/ `4 p I2 ~
* @param biFunction
% [) ^3 H( L7 ]; A& j7 _, \; F * @param function& Z/ y4 W# q z; P4 o3 \1 c
* @return
' N$ m; n9 [/ A- |& c! ? */
?# A6 k* b2 j7 L+ N public int compute4(int a, int b, BiFunction<Integer, Integer, Integer> biFunction, Function<Integer, Integer> function) {
3 u) h8 Y; w- h7 r return biFunction.andThen(function).apply(a, b);) C, E/ P1 b I6 Q
}$ n. D0 U- K" h% G; f
4 C, @& h" a, }5 E+ i1 `+ P/ q% ?+ Z1 J2 R
}
& x5 @5 d; P6 _$ W" P6 f8 B
+ m& u2 D8 m- [3 C9 M6 b
6 L9 L) H- ^# k" o8 `
4 V* O. w; ^) T# _1 i, T L, Z3 @! A
! c" P4 P% f8 |) m
github地址:https://github.com/itmrchen/java8位置在 java8\src\main\java\com\javazx\jdk8\FunctionTest.java FunctionTest2.java$ y _8 j% x6 s
+ _( T: E4 G& s7 Y* U
, v: i4 v% u$ o2 @0 W) e/ i5 H% M' ~( M9 ~1 [$ [, G3 r
# L$ @: C' n9 j, Z, r
8 o( f' y/ S8 D" t) ^; v# S |
|