Consumer接口的方法为accept(),返回void。可以理解为accept参数并执行一定的逻辑。
peek方法是中间操作,如果不触发终止操作,他不会执行任何处理。
java中经常要用到判断和赋值(或者输出等操作),Predicate和Consumer就可以很好的解决这个问题。
可以定义多个不同consumer,通过andThen来串联起来,实现不同的逻辑,实现代码的复用。
@Data
public class Person {
private String name;
public static void main(String[] args) {
Person person = new Person();
person.setName("zhangsan");
Consumer<Person> consumer=(s)->{
s.setName("lisi");
System.out.println(s.getName());
};
Consumer<Person> consumer2=(s)-> {
System.out.println(s.getName());
};
//这说明consumer可以修改传入对象的内部值,以便于后续继续操作
//这里有一点需要注意,调用accept()方法的时候才会执行代码,andThen只是把代码的逻辑组合起来
consumer.andThen(consumer2).accept(person); // lisi lisi
System.out.println(person.getName());
}
}
peek的意思是偷看,查看,传入Consumer接口,不消耗对象。
peek例子如下:
System.out.println(Stream.of("one", "two", "three", "four")
.filter(e -> e.length() > 3)
.peek(e -> System.out.println("Filtered value: " + e))
.map(String::toUpperCase)
.peek(e -> System.out.println("Mapped value: " + e))
.collect(Collectors.toList()));
来源:CSDN
作者:chushiyunen
链接:https://blog.csdn.net/enthan809882/article/details/103933819