|
《Java8函数式编程之Function》场景:可以应用在计算逻辑中 java代码
5 P# w% w* t {# Z
& c) p( W& [% S% ], \5 K% [# ~" }% V6 i/ a部分java源码:
& L$ x- d9 V6 x* s1、
" E) M& Y/ {- J9 K e: B6 mpackage com.javazx.jdk8;- N: S) W% ?! g' \- T v
2 O7 N# q( L2 N, n% g" U7 U
import java.util.function.BiFunction;! \! Y' u# B# ?) z" v
import java.util.function.Function;0 Q# B# `/ T2 t+ i4 I. y7 I
1 v- r* t0 T( g& h1 b/ G- d2 O% Q: `; O
/**8 P5 i* s a' R9 L. Z7 e! z
* @author: itmrchen
$ d. ~! N4 d4 D$ L! `# p+ V * @Description: Function中的compose和andThen两个方法的使用
7 U4 [* c1 v- t/ }. {* F * 如果是两个参数一个输出则用BiFunction
; r5 N3 D, I' K2 t3 N * @date 2019/8/6 0:16
" X! o% Z2 U/ z1 H */
7 m0 Z1 w6 E; w6 `1 T% Ppublic class FunctionTest2 {
, [" r. h/ @/ o$ m2 u public static void main(String[] args) {5 m5 N4 n" _+ ~6 u
FunctionTest2 functionTest = new FunctionTest2();
1 C- T) [) M! q8 \" o% P! Y System.out.println(functionTest.compute(2, value -> value * 3, value -> value * value));" S7 m' f k: p: M
System.out.println(functionTest.compute2(2, value -> value - 3, value -> value * value));
1 W* {% |1 d/ a5 U1 H7 x+ a1 L0 A) k# O$ z+ V" J
System.out.println(functionTest.compute3(2, 3, (value1, value2) -> value1 + value2));
5 H: |. I- g8 |! v( d R: p) u4 Z4 r7 I* F
System.out.println(functionTest.compute4(2, 3, (value1, value2) -> value1 + value2, value -> 2 * value));
% m5 ]( O, N& L
5 ]; S: l% w: t7 O4 |& l }9 m4 C/ U) V3 x7 s7 z- ~
8 m3 D1 l. ^: `0 `$ z2 h2 ?, L
/**
- m; T/ S! [/ |. V2 f( h$ _5 y * 先计算function2 再将结果与function1运算
( W, O; z. v) b1 z *# [2 w" |# Q. J, m. J; b2 o
* @param a4 b& W% X4 p/ g
* @param function17 E3 O( v3 p* N$ W5 ]" ]
* @param function2
O. n1 e# r, Q8 \* A2 E * @return
3 R- C I6 t( ~1 Z* | */
! F+ |9 @! @, \: K public int compute(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {
0 ]; r/ ^. ^3 P A8 ` return function1.compose(function2).apply(a);
3 F- h, t, c. p; j8 v6 q }; w5 N/ Y% {. a" Q% }7 V7 u5 o
- w' n B, a8 F4 X8 Z
/**4 K" v! m5 h. ~, Z- F
* 先计算function1 再将结果与function2运算
! i. W" \0 l: I* n1 y *: }: v4 g8 [3 i% |. U8 L& z
* @param a) Q$ a* |; l% |+ J* q! C
* @param function1
- b; M% `- ]+ M' U! w# Y * @param function2
1 p) t. A6 B+ s% } * @return
% L9 f: c: [* W7 c" x7 m */
& B2 T( T# q# ^# t# d public int compute2(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {: a% K J; L# \5 W( U$ n
return function1.andThen(function2).apply(a);
, `6 Y. f( W% ~4 d }
0 U+ l6 y% Y, z0 M' s7 ^: l, R, K$ K4 t2 s% U2 O- H
/**. t- g: }; ?' P' }6 |. q. x' w& t$ ?
* 具体操作由调用者决定
1 V1 t; v, \* b# P( M A *8 j" {2 R& L. m q2 ^6 G
* @param a) y) v0 {& m3 a; C9 ^4 P
* @param b+ N3 \ |# t+ w% S8 @3 _1 G1 a
* @param function8 A- J' }# |6 D5 Q" ~+ X6 u% B) Q
* @return$ B- G8 {9 d! w7 s9 B* e8 b
*/" V3 V4 ?! I( C6 [' d
public int compute3(int a, int b, BiFunction<Integer, Integer, Integer> function) {
6 q. s; b4 _8 e [. L, N4 o1 m return function.apply(a, b);
. G7 B0 F( E( D8 l" g$ X, v }: h1 H2 h- r( ]1 S! R
6 }$ c0 S h9 [+ E" o7 s0 h
/**
1 s; c1 S/ r& e. p; z * @param a+ m% z6 B6 P; P3 k% H: e1 |
* @param b' `" C5 R$ S i/ h' u
* @param biFunction* ]8 s8 I+ l7 z( l# g9 S6 \
* @param function
. E/ Q- }$ S7 X' O0 Q4 ~2 N * @return
: h; k' ]- I7 T( {7 w- ~& J* m */4 W: J+ U8 z* c w
public int compute4(int a, int b, BiFunction<Integer, Integer, Integer> biFunction, Function<Integer, Integer> function) {0 {6 b8 |1 D+ R
return biFunction.andThen(function).apply(a, b);
# y' _/ s! D" `/ T }
9 C+ ], ~0 c( m& H) S$ B, h$ N5 c# D) C1 Z7 _$ h- J( m& e; V6 f* M
" \6 F6 E: S8 \+ _6 ]1 I6 S9 \/ _
}- V6 G& L k, C: _2 c' d$ u( S' {
8 @ K" h% P4 D0 F3 i4 R* L) P& ~( S0 h
7 Q+ j) Z( r; e# t& J6 P
& a3 } O$ ]$ l- R2 k7 [7 V o
' @2 z V+ _- z; `' p; D. l1 v
github地址:https://github.com/itmrchen/java8位置在 java8\src\main\java\com\javazx\jdk8\FunctionTest.java FunctionTest2.java+ b: d- J% B$ u: R. r
7 w& R0 N* G5 Q/ X
0 G+ a( A. n$ `# d) n) F3 S" G
$ D9 q# G7 P5 b
8 ?& ]" w1 w! s$ ~% n |
|