Skip to content

Commit 01abf65

Browse files
authored
Bael 8067 (#16811)
* pass function as parameter" * pass function as parameter
1 parent 82dd073 commit 01abf65

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.baeldung.functionparameter;
2+
3+
import java.util.function.BiFunction;
4+
import java.util.concurrent.Callable;
5+
6+
interface Operation { int execute(int a, int b); }
7+
8+
public class FunctionParameter {
9+
10+
public static int performOperation(int a, int b, Operation operation) { return operation.execute(a, b); }
11+
12+
public static int passFunctionUsingAnnonymousClass(int a, int b) {
13+
return performOperation(a, b, new Operation() {
14+
@Override
15+
public int execute(int a, int b) {
16+
return a + b;
17+
}
18+
});
19+
}
20+
21+
public static int passFunctionUsingLambda(int a, int b) {
22+
return performOperation(a, b, (i, k) -> i + k);
23+
}
24+
25+
private static int add(int a, int b) { return a + b; }
26+
27+
public static int passFunctionUsingMethodReferrences(int a, int b) {
28+
return performOperation(a, b, FunctionParameter::add);
29+
}
30+
31+
private static int executeFunction(BiFunction<Integer, Integer, Integer> function, int a, int b) { return function.apply(a, b); }
32+
33+
public static int passFunctionUsingFunction(int a, int b) {
34+
return executeFunction((i, k) -> i + k, a, b);
35+
}
36+
37+
private static int executeCallable(Callable<Integer> task) throws Exception {
38+
return task.call();
39+
}
40+
41+
public static int passFunctionUsingCallable(int a, int b) throws Exception {
42+
Callable<Integer> task = () -> a + b;
43+
return executeCallable(task);
44+
}
45+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.baeldung.functionparameter;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
public class FunctionParameterUnitTest {
8+
9+
@Test
10+
void givenAddFunction_whenUsingAnnonymousClass_thenReturnSumValue() {
11+
assertEquals(8, FunctionParameter.passFunctionUsingAnnonymousClass(5, 3));
12+
assertEquals(0, FunctionParameter.passFunctionUsingAnnonymousClass(100, -100));
13+
}
14+
15+
@Test
16+
void givenAddFunction_whenUsingLambda_thenReturnSumValue() {
17+
assertEquals(8, FunctionParameter.passFunctionUsingLambda(5, 3));
18+
assertEquals(0, FunctionParameter.passFunctionUsingLambda(100, -100));
19+
}
20+
21+
@Test
22+
void givenAddFunction_whenUsingMethodReferrences_thenReturnSumValue() {
23+
assertEquals(8, FunctionParameter.passFunctionUsingMethodReferrences(5, 3));
24+
assertEquals(0, FunctionParameter.passFunctionUsingMethodReferrences(100, -100));
25+
}
26+
27+
@Test
28+
void givenAddFunction_whenUsingFunction_thenReturnSumValue() {
29+
assertEquals(8, FunctionParameter.passFunctionUsingFunction(5, 3));
30+
assertEquals(0, FunctionParameter.passFunctionUsingFunction(100, -100));
31+
}
32+
33+
@Test
34+
void givenAddFunction_whenUsingCallable_thenReturnSumValue() throws Exception {
35+
assertEquals(8, FunctionParameter.passFunctionUsingCallable(5, 3));
36+
assertEquals(0, FunctionParameter.passFunctionUsingCallable(100, -100));
37+
}
38+
}

0 commit comments

Comments
 (0)