zoukankan      html  css  js  c++  java
  • JDK8日常开发系列:Consumer详解

    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

  • 相关阅读:
    GitLab 介绍
    git 标签
    git 分支
    git 仓库 撤销提交 git reset and 查看本地历史操作 git reflog
    git 仓库 回退功能 git checkout
    python 并发编程 多进程 练习题
    git 命令 查看历史提交 git log
    git 命令 git diff 查看 Git 区域文件的具体改动
    POJ 2608
    POJ 2610
  • 原文地址:https://www.cnblogs.com/tangliMeiMei/p/13052454.html
Copyright © 2011-2022 走看看