java 8 函数式接口_Java8之四大函数式接口

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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值