Java8中内置的四大函数式接口:
Consumer :消费型接口
void accept(T t);
Supplier :供给型接口
T get();
Function :函数型接口
R apply(T t);
Predicate :断言型接口
boolean test(T t);
1.消费型接口
基本格式
Consumer
接受一个输入参数并且无返回值。
方法调用
void accept(T t);
实例
@Test
public void testConsumer() {
handle(6, (x) -> System.out.println(x + 2));
}
public void handle(int value, Consumer consumer) {
consumer.accept(value);
}
2.供给型接口
基本格式
Supplier
无输入参数,返回一个结果T。
方法调用
T get();
实例
@Test
public void testSupplier() {
Person person = Person.builder()
.name("供给者")
.build();
System.out.println(getObject(() -> person.getName()));
}
public String getObject(Supplier supplier) {
return supplier.get();
}
3.函数型接口
基本格式
Function
接受一个输入参数T,返回一个结果R。
方法调用
R apply(T t);
实例
@Test
public void testFunction() {
int result = plusTwo(6, (x) -> x + 2);
System.out.println(result);
int before = before(6, x -> x + 2, x -> x * 10);
// 62
System.out.println(before);
int after = after(6, x -> x + 2, x -> x * 10);
// 80
System.out.println(after);
}
public Integer plusTwo(int origen, Function function) {
return function.apply(origen);
}
public Integer before(int value, Function function1, Function function2) {
// value作为function2的参数,返回一个结果,该结果作为function1的参数,返回一个最终结果
return function1.compose(function2).apply(value);
}
public Integer after(int value, Function function1, Function function2) {
// value作为function1的参数,返回一个结果,该结果作为function2的参数,返回一个最终结果
return function1.andThen(function2).apply(value);
}
4.断言型接口
基本格式
Predicate
接受一个输入参数T,返回一个布尔值结果。
方法调用
boolean test(T t);
实例
@Test
public void testPredicate() {
boolean judge = judge(6, (x) -> (x & 1) != 1);
System.out.println(judge);
List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
System.out.println("输出所有数据:");
eval(list, x -> true);
// 1 2 3 4 5 6 7 8 9
System.out.println();
System.out.println("输出所有偶数:");
eval(list, x -> (x & 1) != 1);
// 2 4 6 8
System.out.println();
System.out.println("输出大于 3 的所有数字:");
eval(list, x -> x > 3);
// 4 5 6 7 8 9
System.out.println();
// 验证输入是否正确
boolean valid = valid("许宣", x -> !x.isEmpty() && x.length() <= 3);
System.out.println(valid);
}
public boolean judge(Integer input, Predicate predicate) {
return predicate.test(input);
}
public static void eval(List list, Predicate predicate) {
for (Integer n : list) {
if (predicate.test(n)) {
System.out.print(n + " ");
}
}
}
public boolean valid(String name, Predicate predicate) {
return predicate.test(name);
}