java Consumer<>_JDK8日常开发系列:Consumer详解

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

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

@FunctionalInterface

public interface Consumer {

void accept(T t);

default Consumer andThen(Consumer super T> after) {

Objects.requireNonNull(after);

return (T t) -> { accept(t); after.accept(t); };

}

}

其核心方法如下:

void accept(T t);

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

default ConsumerandThen(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 lisiList = new ArrayList<>();

Consumer 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 ConsumerandThen(Consumer super T> after)

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

List lisiList = new ArrayList<>();

Consumer 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

处理一个两个参数

DoubleConsumer

处理一个double类型的参数

IntConsumer

处理一个int类型的参数

LongConsumer

处理一个long类型的参数

ObjIntConsumer

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

ObjLongConsumer

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

欢迎关注微信公众号,获取更多资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值