Java8新特性(二)

本文介绍了Java8中四个核心函数式接口Consumer、Supplier、Function和Predicate的实际应用场景,并通过示例代码展示了如何利用这些接口简化编程流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java8自带函数式接口

1、主要的四大内置函数式接口(上一篇已经讲过函数式接口的特点,所以以下列出了接口名称以及对应的抽象方法名称

接口名称方法名称方法特点备注
Consumer<T>void accept(T t)有入参,无返回值消费型接口
Supplier<T>T get()无入参,有返回值供给型接口
Function<T, R>R apply(T t)T类型入参,R类型出参,T和R可以相同函数型接口
Predicate<T>boolean test(T t)有入参,返回boolean类型断言型接口

 

 

 

 

 

 

 

2、具体实战示例

2.1 Consumer<T>

public class ConsumerDemo {
    public static void print(User user) {
        System.out.println(user);
    }
    
    public static void showUser(User user, Consumer<User> consumer) {
        consumer.accept(user);
    }

    public static void main(String[] args) {
        showUser(new User(1001,"张三"),x -> print(x));
    }
}

分析:在showUser方法中使用了Consumer接口,Consumer接口有一个accpet方法需要实现,具体特点是有入参,无返回值。

入参就是new User(1001,"张三"),aceept的具体实现就是print方法。

2.2 Supplier<T>

public class SupplierDemo {
    public static User createUser() {
        return new User(1001,"张三");
    }

    public static User showUser(Supplier<User> supplier) {
        return supplier.get();
    }

    public static void main(String[] args) {
        User user = showUser(SupplierDemo::createUser);
        //相当于User user = showUser(() -> createUser());
        System.out.println(user);
    }
}

分析:同理,这次需要一个没有入参,有返回值的方法,也就是createUser();

2.3 Function<T, R>

public class FunctionDemo {
    public static User changeUser(User user,Function<User,User> function) {
        return function.apply(user);
    }

    public static User createSpecialUser(User user) {
        user.setId(999);
        user.setName("特殊");
        return user;
    }

    public static void main(String[] args) {
        User user = changeUser(new User(1001, "张三"), x -> createSpecialUser(x));
        System.out.println(user);
    }
}

2.4 Predicate<T>

public class PredicateDemo {
    public static Boolean testCompare(Integer i,Predicate<Integer> predicate) {
        return predicate.test(i);
    }

    public static void main(String[] args) {
        Boolean flag = testCompare(100, x -> (x < 101));
        System.out.println(flag);
    }
}

3、总结使用技巧

看了上面的代码示例,能发现这几个自带的函数式接口都是有共性的。如果当某个方法的具体入参是一个上述的函数式接口,那么你需要传入的入参实际上就是一个lambda表达式类似:x-> f(x)、x->f()、f()、f(x)等等,这个要看你使用了哪个接口。

还有Java8还有一些其他的函数式接口,可以自己去了解:http://www.runoob.com/java/java8-functional-interfaces.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值