java8 stream.peek()方法,Consumer的使用

☆樱花仙子☆ 提交于 2020-01-29 00:51:54

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()));
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!