|
《Java8函数式编程之Function》场景:可以应用在计算逻辑中 java代码0 |( q3 ^# @! e- F1 D
" G4 G, q6 G$ g/ c0 I) }1 B
部分java源码:4 H+ T+ G; C' k0 \7 c/ p! [7 o" {
1、8 v, }, V" V/ k; |4 D
package com.javazx.jdk8;. r5 D; O, k6 J! U* I6 { g# |
, b, M+ `3 n0 P. _
import java.util.function.BiFunction;+ q8 n' Q: d$ N) [$ t0 D3 W
import java.util.function.Function;
5 e8 l" |! x* v/ X, I" B: @
5 E) @: T+ t; l- S4 u+ x* {' |8 s/**( [* ^ A$ N/ c8 _9 S6 }
* @author: itmrchen7 ]& N3 ?; f0 w. c8 I7 i/ {" `2 Q* Z
* @Description: Function中的compose和andThen两个方法的使用1 U' \2 [" R' y% w) Y. e
* 如果是两个参数一个输出则用BiFunction
4 b/ b0 B+ _3 z * @date 2019/8/6 0:16 q) @, v8 m# Y& F! t. O# |
*/
0 ]; B( ?4 Q* gpublic class FunctionTest2 {
) X! T4 J4 c' {0 t) c" K public static void main(String[] args) {& ^' i1 \/ \4 y) d [( q+ D
FunctionTest2 functionTest = new FunctionTest2();
) E5 v$ j. n; z' w" H# |* k System.out.println(functionTest.compute(2, value -> value * 3, value -> value * value));
' _2 y1 q) V4 |9 C( x# m5 Z( p System.out.println(functionTest.compute2(2, value -> value - 3, value -> value * value));2 B4 }+ Q& ~7 @5 d! Q3 D e ?
) o9 ?2 z! O0 m* z v6 m
System.out.println(functionTest.compute3(2, 3, (value1, value2) -> value1 + value2));
, c2 f0 l: w' J g3 W( f4 S, X- Z: X$ _* U4 W- u3 V
System.out.println(functionTest.compute4(2, 3, (value1, value2) -> value1 + value2, value -> 2 * value));
$ u8 D; ?$ i) m" [! P( r/ B7 r+ |3 d$ e: b3 ^! {+ ?" X
}; B. E2 k8 u$ D- [
: I6 R" z& [% G9 w! d /**
2 y. W& `% q1 @( \ * 先计算function2 再将结果与function1运算3 b3 b; v5 `# i- q' v; F& k
*7 K v3 ]7 Q. L! w2 _1 k+ e
* @param a6 \. }# E9 O0 U1 D7 I
* @param function1
; m0 L/ M& ]) q) I9 {& Z * @param function2$ o) j. T% ?, j1 g
* @return
9 M$ k. i" n' e) i' k1 I# G */
4 X7 M$ [6 {" \8 p$ @ public int compute(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {* [+ x7 X/ c) f* D
return function1.compose(function2).apply(a);
H! \, l' J: J }
& V. D' J4 O2 s& [: B% r3 c( y
& q0 w$ ^4 c+ a+ T: O2 w) y /**
1 o" I. H- [. ]0 z * 先计算function1 再将结果与function2运算
! l2 M+ a1 x( r: v5 |/ Y: J *& _( N& v. Y: c" ?
* @param a4 x, ]; a! p% K, V
* @param function1& Z: Q i% U* Y
* @param function2; {7 y- _: c& }9 n+ \% X: w: ?
* @return
+ V4 {, ]4 y$ [* L */ Z7 {& x7 s9 N$ x8 x
public int compute2(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {
6 y$ ~# Q# i6 }/ k+ Z$ G2 K q return function1.andThen(function2).apply(a);
7 x2 t X# f& I. Q- J# Q ]7 Q: { }4 o/ X! l# w7 Y3 U
/ c' F$ k8 ]# E. l5 d
/*** B2 k6 f8 U) i: d, c
* 具体操作由调用者决定
4 }$ i A; s q *4 K6 P( C' W# g/ D
* @param a
& L" W5 F/ ]3 | * @param b
9 n% [2 t3 L s0 o * @param function0 }% f/ [" z* F# u& G
* @return
* q1 o* @7 Z8 y% b' Q8 D */
7 k+ b$ W' ]! t. A. ] public int compute3(int a, int b, BiFunction<Integer, Integer, Integer> function) {
- Q' h( D0 w9 c$ Y. e- p return function.apply(a, b);
" @4 R$ c: ^% u) l+ a$ y }5 l4 G. `6 x4 s/ P! Q
- q, m' X7 n2 g+ Y) ^+ O0 A /**' T& U0 k' ^. D; E2 @# v
* @param a2 `& a* B! o/ L
* @param b
& }8 d. l$ E/ l * @param biFunction+ @8 F: Z4 @, W: v
* @param function! y. W8 \' p6 h" o$ l9 `+ o
* @return+ w1 @+ B0 ^% |6 Z
*/
! T* s* I' I G3 L public int compute4(int a, int b, BiFunction<Integer, Integer, Integer> biFunction, Function<Integer, Integer> function) {
1 z( Q3 a( O3 B$ Z4 f) F: ?( m return biFunction.andThen(function).apply(a, b);
9 X( v) o, I9 t9 A9 W+ f; g; S }( n3 P1 I3 G% u, \% V
- F7 a' m* _) x1 Y( t7 U2 e* j0 w/ x( q/ c
}1 L+ K. q5 w) X( D* [9 t) U" ]$ `
: P& B' V( u! ?
0 K6 a3 y- f, X) J/ O2 b4 Q# a) U9 n6 j3 J: a
[( D5 a) m" ^, V6 _" G% P2 x5 g) t2 a2 K5 _
github地址:https://github.com/itmrchen/java8位置在 java8\src\main\java\com\javazx\jdk8\FunctionTest.java FunctionTest2.java
, ~2 u) f* _2 g
( a* g- Y8 l/ t8 o( f( S+ W$ d& v6 S+ c
2 A4 C$ E5 r4 I% x% F. I4 i
( }0 W6 e! c) `) G
7 T: _; g, I( I( U- x9 d( |6 u' g |
|