爱生活,爱分享


JAVA8 Consumer 接口

haiten 2021-06-04 531浏览 0条评论
首页/正文
分享到: / / / /

一、接口定义

函数式接口的定义:接口中只有一个抽象方法的接口,称为函数式接口。在 Java8 中 Consumer 是一个消费型的函数式接口(有一个参数,无返回值),其定义如下:

@FunctionalInterface
public interface Consumer<T> {

    void accept(T t);

    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
}

二、使用举例

Consumer 接口,可以通过 accept 方法实现对某个对象消费逻辑的调用,也可以通过 andThen + accept 方法实现对某个对象消费逻辑的链式调用:

import java.util.function.Consumer;

public class TestConsumer {

    public static class DemoExample {
        public static void myIntegerConsumer(Integer x) {
            System.out.println("myIntegerConsumer accept " + x + " and do something...");
        }

        public static void myStringConsumer(String x) {
            System.out.println("myStringConsumer accept " + x + " and do something...");
        }

        public static <T> T myGenericsyConsumer(T x) {
            System.out.println("myGenericsyConsumer " + x + " and do something...");
            return x;
        }
    }

    public static void main(String[] args) {
        Consumer<Integer> consumer1 = new Consumer<Integer>() {
            @Override
            public void accept(Integer x) {
                System.out.println("myGeneralComsumer accept " + x + " and do something...");
            }
        };

        Consumer<Integer> consumer2 = x -> System.out.println("myLambdaComsumer accept " + x + " and do something...");

        Consumer<Integer> consumer3 = DemoExample::myIntegerConsumer;

        Consumer<String> consumer4 = DemoExample::myStringConsumer;

        Consumer<Integer> consumer5 = DemoExample::myGenericsyConsumer; // 目标函数可以有返回值,但入参必须只有一个

        consumer4.accept("ssss");
        consumer1.andThen(consumer2).andThen(consumer3).andThen(consumer5).accept(1234);

    }
}

原创不易,如需转载,请标明出处!

最后修改:2021-06-04 02:13:34 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

说点什么吧~

评论列表

还没有人评论哦~赶快抢占沙发吧~