码迷,mamicode.com
首页 > 其他好文 > 详细

JDK8日常开发系列:Consumer详解

时间:2020-06-05 22:52:16      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:after   函数式   ToJson   执行   The   blog   sum   remove   private   

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

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); };
    }
}

其核心方法如下:

  • void accept(T t);
    对给定的参数T执行定义的操作
  • default Consumer andThen(Consumer<? super T> after)
    对给定的参数T执行定义的操作执行再继续执行after定义的操作

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

accept(T t)

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

/**
 * 此处使用lombok插件(值得了解)
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
public class Person {
    private Integer age;
    private String name;
}

List<Person> lisiList = new ArrayList<>();
Consumer<Person> consumer  = x -> {
    if (x.getName().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<? super T> after)

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

List<Person> lisiList = new ArrayList<>();
Consumer<Person> consumer  = x -> {
    if (x.getName().equals("lisi")){
        lisiList.add(x);
    }
};
consumer = consumer.andThen(
        x -> lisiList.removeIf(y -> y.getAge() < 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<T, U>

处理一个两个参数

  • DoubleConsumer

处理一个double类型的参数

  • IntConsumer

处理一个int类型的参数

  • LongConsumer

处理一个long类型的参数

  • ObjIntConsumer

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

  • ObjLongConsumer

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

转载来自https://blog.csdn.net/x851288986/article/details/95816253

JDK8日常开发系列:Consumer详解

标签:after   函数式   ToJson   执行   The   blog   sum   remove   private   

原文地址:https://www.cnblogs.com/tangliMeiMei/p/13052454.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!