简介

  1. Java Consumer接口来自Java 8中引入的 java.util.function包。

  2. Consumer是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递一个参数执行指定的方法)。

  3. Consumer的功能接口是一个接受单一参数并且不返回任何结果的操作

  4. Consumer的功能方法是accept(T t)。

源码分析

@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); };
    }
}
  • accept : 这是Consumer功能接口的功能方法。accept 方法对给定的参数进行这一操作。

  • andThen : 此方法返回一个组合的Consumer,该Consumer先执行原始的Consumer操作,然后按照从左到右的顺序执行给定的andThen操作。

使用示例

public class ConsumerDemo1 {

    @Test
    //消费接口。消费的内容是一个函数式接口。s+s = 246
    public void consumerAccept () {
        handler(123, s-> Console.log("consumerAccept --> " + (s+s)));
        /* 输出结果
        consumerAccept --> 246*/
    }

    //Consumer 消费接口,传入一个泛型参数
    public <T> void handler (T t, Consumer<T> consumer) {
        consumer.accept(t);
    }

    @Test
    //消费接口。消费的内容是一个函数式接口。s+s = 246  c-1 = 122
    public void consumerAndThen () {
        handler(123, s-> Console.log("consumerAndThen1 --> " + (s+s)), c-> Console.log("consumerAndThen2 --> " + (c-1)));
        /* 输出结果
        consumerAndThen1 --> 246
        consumerAndThen2 --> 122*/
    }

    //Consumer 消费接口,传入一个泛型参数
    public <T> void handler (T t, Consumer<T> consumer1, Consumer<T> consumer2) {
        consumer1.andThen(consumer2).accept(t);
    }

}

总结

主要使用场景是:需要操作一个对象,但是不需要返回任何数据。