|
《Java8函数式编程之Function》场景:可以应用在计算逻辑中 java代码5 r: a9 K: c, r+ h7 T9 P8 Q
& f1 c5 _- P8 h- H' ]) m, @
部分java源码:
, ?# e8 T7 f# L8 n5 k# w1、" K8 q+ z9 o$ \( \( b: h
package com.javazx.jdk8;$ X$ Q1 v, ?' l0 f# r
5 T5 |" O, K2 M# q W
import java.util.function.BiFunction;* G% A/ r i; i4 k. v
import java.util.function.Function;" Z9 D( f, R. @5 A" q
m/ r2 V( K1 r/ d6 t6 X. L- z, K
/**
7 T0 [( Z& m+ m) z; a0 T2 `+ {/ @# l * @author: itmrchen3 @ Z5 S1 i: E/ w# {; G
* @Description: Function中的compose和andThen两个方法的使用
5 I4 J0 [+ j2 z/ v( E * 如果是两个参数一个输出则用BiFunction( [& Z5 A% ~& K! [. n$ u l
* @date 2019/8/6 0:16; d( m0 y6 ^# `# S0 }
*/ Y" V* H; }* C; p3 B
public class FunctionTest2 {, v; }( A1 V- ]: w8 o
public static void main(String[] args) {7 i7 k j8 |$ l+ m; y8 E- _# L% T
FunctionTest2 functionTest = new FunctionTest2();
: @; s# t5 C1 z* r- T1 S4 z System.out.println(functionTest.compute(2, value -> value * 3, value -> value * value));, d3 Q" W) o7 Y" L! C/ Q' {- |
System.out.println(functionTest.compute2(2, value -> value - 3, value -> value * value));
1 c9 @+ C, @8 s# B. T& u
9 s3 I$ X' J, |' V6 B& l4 F% y2 p System.out.println(functionTest.compute3(2, 3, (value1, value2) -> value1 + value2));, Y0 U. P$ G3 U' D& d+ J
* j. b+ m' h6 y s2 s
System.out.println(functionTest.compute4(2, 3, (value1, value2) -> value1 + value2, value -> 2 * value));8 M: x$ k1 t; Z; \! I- v1 D
' }2 T) A5 O9 o; f, u0 \8 \" a' W4 j# n
}
1 l0 `. d2 w) J% |* [$ r" G, l1 h! j' K' u" t/ A
/**
# P; {# J" f0 [8 [! h * 先计算function2 再将结果与function1运算
% W$ {1 b) u c4 n0 z: u5 L4 }. e *" V- P: @7 s9 z3 p& L
* @param a, v" m, \" q7 k- x9 e+ b0 R
* @param function1+ D/ i3 U. Q, V9 J' [$ z6 |
* @param function2
' [; L; U7 Q/ ]# O$ y( g/ Y * @return
& h! R& F- `$ x */" y/ s) U, c* A( U, Q! ?
public int compute(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {: f! |* R5 z' z. P3 ^: q0 l
return function1.compose(function2).apply(a);$ Y2 z* k2 y" h" K, d1 f) z
}# A5 q0 }, t* `
/ A( L: M* J) y: a& d0 N" g6 k5 z /**0 I9 P- T6 ^4 D, ^+ j# P
* 先计算function1 再将结果与function2运算
8 Q4 _* u( W9 x( J- J9 y# m *6 Q, c0 Y3 i; ^# F+ ~/ A% a
* @param a
. i$ t% M, r, k1 c5 R9 A1 j% y7 t5 f2 g * @param function1
9 E. F& B# |1 J, o" e6 Q * @param function29 Q" w+ Y* Y c( z2 m' F
* @return
/ {9 s, \/ u2 Y( H8 } */
" z( Z: T1 M2 @1 W/ Q# R( C public int compute2(int a, Function<Integer, Integer> function1, Function<Integer, Integer> function2) {
5 V- _# P' |1 H; a$ B0 x return function1.andThen(function2).apply(a);/ y5 ~2 Z) r$ n' R/ g3 U
}7 B/ T2 h2 o: c9 b7 c' I4 m1 g- O
9 O/ `; s* |+ K7 Q
/**
$ M. `! W1 X, H3 E3 n$ `4 S * 具体操作由调用者决定
: K2 r) X6 a& ^; P9 H7 B7 V) } *( j) i0 s/ J/ @# ^5 G
* @param a+ j1 C5 J6 u" o" k' o4 y; {
* @param b
; u) ^8 u/ i7 Q5 d' V5 \6 w * @param function
9 S8 f6 K* L9 w+ R( e * @return
. l1 C$ C v) a4 J7 u) P */
( n1 D# o( b6 j( ? public int compute3(int a, int b, BiFunction<Integer, Integer, Integer> function) {9 a' P5 I# h' c0 W! F0 C9 }
return function.apply(a, b);
; `% q7 `9 ?# c }
9 Q1 d! Y, f/ v& \; C4 J. N1 Q" g8 T7 i6 U
/**
: J" E6 \( Y3 X, j. f$ k3 H' T& e) U# Q * @param a5 K8 J. M$ h+ q0 n
* @param b
* f* m' i V$ l. Y' v * @param biFunction
8 r8 f7 v M+ S5 j: ?) Y * @param function* a9 h: P) T$ s6 x
* @return; {2 f* m0 h4 y, l0 X% G
*/$ _2 O3 g4 h" {# T
public int compute4(int a, int b, BiFunction<Integer, Integer, Integer> biFunction, Function<Integer, Integer> function) {
- J2 d7 O3 K) n return biFunction.andThen(function).apply(a, b);/ I9 \3 ~( D! U
}
; S& K4 T/ x9 C( u8 n
/ a2 c' p U; N) l/ c: D7 Z0 `; e! ~& A8 a8 U* n( `+ w
}
9 e/ t% }/ f- l& a
! V' l' V" n7 x
# ]" I! S! W+ E* w2 n. W3 J+ g0 |* w: y! ?1 c- m3 `
$ i6 }* J( d( R" O1 X9 I7 S4 r- L
1 N' S* K+ T: n, f6 D; t
github地址:https://github.com/itmrchen/java8位置在 java8\src\main\java\com\javazx\jdk8\FunctionTest.java FunctionTest2.java
7 B! @, o- C8 Z+ o" ~8 E$ x+ l
_- ^3 w) t. t# G7 x7 J/ @7 K: e8 n; s% P0 w7 [- Q' p- n
" f9 u6 n, D- b: d8 q8 O
* ?; |) X5 F% q/ Z2 X, L% p$ B
+ P& K! L, E, g |
|