|
《Java8函数式编程之Function》场景:可以应用在计算逻辑中 java代码2 J& R5 {/ W* g/ i& p8 \
5 p- N8 [# R" B$ u2 f8 S部分java源码:% ^1 H) I5 C7 ^% F- q
1、
( M* a/ q3 G9 Q2 `package com.javazx.jdk8;
7 M$ [8 R: J t9 f, e+ V$ j2 L6 O2 X2 [4 [% q, }& c/ l0 X
import java.util.function.BiFunction;0 c* @6 n1 y. V5 g& k9 G! |5 V. f. H
import java.util.function.Function;
& y) t; a! R# G6 k( f1 C( {0 Z! X8 S4 q
/**, m- K7 Z7 T( q
* @author: itmrchen
5 [# b0 B _) w * @Description: Function中的compose和andThen两个方法的使用
+ x; ^% M6 \$ n: K9 o * 如果是两个参数一个输出则用BiFunction% N c# ~6 N& h$ j/ A% _# }1 s$ P
* @date 2019/8/6 0:16
* g# T5 Z5 l% h2 o$ z# }- }$ \ */
7 Z$ A: t* j/ g( `public class FunctionTest2 {7 [$ |$ y" h+ Z/ z, G) C8 ?
public static void main(String[] args) {
; ~, J# a5 Z2 e8 M, X) A- M' ?% n FunctionTest2 functionTest = new FunctionTest2();1 l4 v- K* z) [( ~/ d8 @: [7 k1 Q
System.out.println(functionTest.compute(2, value -> value * 3, value -> value * value));" t5 r! R7 t- V& {
System.out.println(functionTest.compute2(2, value -> value - 3, value -> value * value));
# s: P% l2 d" @% \* [% I8 k2 `8 l( a/ k
System.out.println(functionTest.compute3(2, 3, (value1, value2) -> value1 + value2));
* V5 s" E! z" d5 {4 ]2 b! D; N" I6 P, D. b8 i) `) G4 N' Y
System.out.println(functionTest.compute4(2, 3, (value1, value2) -> value1 + value2, value -> 2 * value));
4 O k/ L& ]' P3 o7 O
X9 r8 }' R2 }" Q U& n }9 Y9 `' S' X# }; m& f- A
o X# |3 W# f- p# [5 z$ N
/**
6 f2 B4 W9 u% P2 g: ~ * 先计算function2 再将结果与function1运算
* j% M: F" z3 @9 W3 n, V- P *
+ v* F6 \) t ~( G( v# T: z * @param a( c) G, J# Z2 K; y- h3 O- ~0 k8 }& W
* @param function1
$ F6 ~- o. w" R, o * @param function2
2 b5 l7 f7 t& J8 M: w9 ?% }# a * @return% p% G6 p% l$ c7 \1 b6 V9 y
*/ ^+ A6 t; U" \( t; N. ~ d2 {
public int compute(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {$ t7 }, k7 X, L+ f9 |
return function1.compose(function2).apply(a);) t: Q' _) z8 t
}
0 u* X# p$ H3 X S8 g6 ]' h% ^2 g: a/ w) x/ t+ Z# x+ C# D
/**2 [) n! D; J/ x( R* @2 j8 q1 u! A( Y
* 先计算function1 再将结果与function2运算
$ x) ^" E2 k: S& G3 k ** i6 n. e+ l& U8 I) b: G
* @param a
1 u" Q# \9 O0 a* M: o8 F * @param function1
0 d6 ]0 p4 Q$ ] * @param function2
6 D, W* {4 U/ P3 E * @return+ ?) @: x& q8 V# ~1 R
*/
- k! y+ d/ d- I6 I6 P$ Z0 o# R public int compute2(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {! Z/ c% u: }1 }1 p
return function1.andThen(function2).apply(a);
/ x4 ?" b; {* Z) Y/ t: o }2 Z! |# L- N P+ o
" _% [ t2 f4 `) S0 T3 U /**+ h9 ]7 O% V3 C# n1 c
* 具体操作由调用者决定
, @* q1 ~% N) F* }: s8 s1 J *$ `0 Q6 T1 Y9 X0 D7 [( j) E
* @param a! g" ^% N' L9 Q
* @param b
4 _; D& e' S' G5 k- F7 M * @param function
/ |/ @' H6 q0 W# s( p; n# N! C2 Z! \ * @return8 U9 N9 m% X( M+ ]. y+ ?
*/
4 I% h; P6 K: m( o+ }. | public int compute3(int a, int b, BiFunction<Integer, Integer, Integer> function) {
9 ~/ \, w9 q. [, H% `. a6 G return function.apply(a, b);
9 O8 @- M" l4 y$ K u }" Q4 q8 a1 @5 i: F+ k
9 B3 C8 N1 Y8 W4 v5 R
/*** v( e X7 Q1 `3 D. ?2 U& s- ], Q
* @param a
+ C$ w( n2 v* p; ?8 B' [ * @param b) \) p" w: Q, M$ V/ V5 P; ^( P1 N
* @param biFunction, L& M' L$ l! K- |$ @3 L( F: F
* @param function
6 ~$ d5 s( S ^/ z( L * @return7 [/ `( Z0 n: W5 x( [% N/ M
*/
: }' c3 p" F, z. p D) @ public int compute4(int a, int b, BiFunction<Integer, Integer, Integer> biFunction, Function<Integer, Integer> function) {# _ J3 Q W4 O, w y4 M
return biFunction.andThen(function).apply(a, b);
) o, p; W4 D0 w1 s }
O# \7 ^! R! O0 w) p7 V; K. L1 z/ D0 p1 d" Z4 a, ~* j
; h( t9 x* q3 M; [4 U% q" j5 j
}8 y# L, e/ w Y( ~. B! a0 I. o' q5 N
6 A' F2 d8 Z7 F7 k8 J1 @$ c! G2 Y/ ^/ C) Y/ r, }: l( F/ O0 b
% b5 i) D: ~: F$ B5 T7 Z! G( ~$ I7 t, F5 e6 @( C
- K9 y6 i. u4 @6 ?( l* y
github地址:https://github.com/itmrchen/java8位置在 java8\src\main\java\com\javazx\jdk8\FunctionTest.java FunctionTest2.java' W" {; o! |0 _! O& D* J+ o
% Z' }* O8 A) o1 F' E; T: w; w2 K. ?4 R
( K+ I9 v+ L1 I, o3 h8 B4 j& [7 t3 }. |' K# [& T
$ ^" O$ M1 v1 f+ P! o/ V1 v( B4 I! v1 ~0 ]% S: M
|
|