Java 8的Consumer,Supplier,Predicate,Function四个接口简单理解

这几个接口都是在java.util.function包下

Consumer

这是一个消费型的接口,通过传入参数,然后输出值.

 /**
     * Consumer实例
     * 该接口有一个accept方法需要传递一个参数,还有一个默认方法
     */
    @Test
    public void test03(){
   
   
        Consumer<String> stringConsumer = new Consumer<String>(){
   
   

            /**
             * Performs this operation on the given argument.
             *
             * @param s the input argument
             */
            @Override
            public void accept(String s) {
   
   
                // 这里可以对传递进来的参数 进行操作
               // s="我是改写的参数";
                System.out.println(s);
            }
        };

        stringConsumer.accept("我是传递的参数");
        System.out.println("==============================");
        // Stream流的forEach使用的就是 Consumer类型的参数  Consumer<? super T> action
        Stream<String> stream = Stream.of("aaa", "bbb", "ddd", "ccc", "fff");
        // 这就意味着我们可以使用 Consumer接口来对于stream流的数据进行过滤或者操作
       // stream.forEach(stringConsumer);
        // 例子  有个要点,就是stream流只能被消费一次,即每次创建的steam流只能被用一次,所以上面的那个需要注释掉或者再次创建一个steam流
        System.out.println("==============================");
        stream.forEach(new Consumer<String>() {
   
   
            @Override
            public void accept(String s) {
   
   
                // 对传递的字符串进行操作
                if(s.equals("aaa")){
   
   
                    s="我是aaa";

                }
                System.out.println(s);
            }
        });
        System.out.println("==============================");
        Stream<String> stream02= Stream.of("aaa", "bbb", "ddd", "ccc", "fff");
        // stream02.forEach(System.out::print);
        // 使用lambda表达式输出,这就是我们常用的那种,本质就是传递一个实现Consumer接口,重写其中的accept方法
       // Consumer<String> consumer1 = (s) -> { System.out.println(s); };
        stream02.forEach(s -> {
   
   
            System.out.println(s);
        });
        
    }

小结

● Consumer是一个接口,其主要方法就是重写accept方法,就可以输出信息或者对信息进行操作
● lambda表达式就是隐式的实现接口来去作为Stream.forEach的参数 实现遍历.

Supplier

这个接口是一个供给型的接口,可以用来存储数据,

 /**
     * Supplier接口实例,相当于一个容器存储值
     */
    @Test
    public void test04() throws Throwable {
   
   
        // Supplier接口只有一个get方法 没有参数,
        Supplier<Double> supplier = Math::random;
        Object o = supplier.get();
        System.out.println(o);
        // 为什么要说他是一个容器呢?
        Supplier<String> str = new Supplier<String>() {
   
   
            @Override
            public String get() {
   
   
                return "我是一个容器";
            }
        };
        String s = str.get();
        System.out
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值