Consumer详解

java.util.function中 Function, Supplier, Consumer, Predicate和其他函数式接口广泛用在支持lambda表达式的API中。这些接口有一个抽象方法,会被lambda表达式的定义所覆盖。

Consumer的作用顾名思义,是给定义一个参数,对其进行(消费)处理,处理的方式可以是任意操作.

@FunctionalInterface
public interface Consumer {

    void accept(T t);

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

其核心方法如下:

  • void accept(T t);

    对给定的参数T执行定义的操作

  • default Consumer andThen(Consumer after)

    对给定的参数T执行定义的操作执行再继续执行after定义的操作

下面对上述方法进行实例测试:

accept(T t)

比如将给定的一批用户里面的名称为"lisi"的用户都给打包起来

  List lisiList = new ArrayList<>();
        Consumer  consumer  =  x -> {
            if (x.name.equals("lisi")){
                lisiList.add(x);
            }
        };
        Stream.of(
                new Person(21,"zhangsan"),
                new Person(22,"lisi"),
                new Person(23,"wangwu"),
                new Person(24,"wangwu"),
                new Person(23,"lisi"),
                new Person(26,"lisi"),
                new Person(26,"zhangsan")
        ).forEach(consumer);

        System.out.println(JSON.toJSONString(lisiList));

结果为:

[{"age":22,"name":"lisi"},{"age":23,"name":"lisi"},{"age":26,"name":"lisi"}]

default Consumer andThen(Consumer after)

比如将给定的一批用户里面的名称为"lisi"且年龄大于22岁的用户都给打包起来

 List lisiList = new ArrayList<>();
        Consumer  consumer  =  x -> {
            if (x.name.equals("lisi")){
                lisiList.add(x);
            }
        };

        consumer = consumer.andThen(
           x -> lisiList.removeIf(y -> y.age < 23)
        );

        Stream.of(
                new Person(21,"zhangsan"),
                new Person(22,"lisi"),
                new Person(23,"wangwu"),
                new Person(24,"wangwu"),
                new Person(23,"lisi"),
                new Person(26,"lisi"),
                new Person(26,"zhangsan")
        ).forEach(consumer);

        System.out.println(JSON.toJSONString(lisiList));

结果为:

[{"age":23,"name":"lisi"},{"age":26,"name":"lisi"}]

与Consumer相关的接口

  • BiConsumer

    处理一个两个参数

  • DoubleConsumer

    处理一个double类型的参数

  • IntConsumer

    处理一个int类型的参数

  • LongConsumer

    处理一个long类型的参数

  • ObjIntConsumer

    处理两个两个参数,且第二个参数必须为int类型

  • ObjLongConsumer

    处理两个两个参数,且第二个参数必须为long类型

你可能感兴趣的:(Consumer详解)