预定义的函数式接口 Consumer

函数接口: Consumer<T, R> 

方法定义: void accept(T t);

说明: 消费者,输入类型T

接口源码

@FunctionalInterface
public interface Consumer<T> {

    /**
     * 抽象方法:传入一个指定泛型的参数,无返回值
     */
    void accept(T t);

    /**
     * 如同方法名字一样andThen,类似一种相加的功能(下面会举例说明)
     */
    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
}

Consumer示例

定义一个学生类Student,它有name和score两个属性,如下所示。

@Setter
@Getter
public class Student {

    String name;

    double score;

    public Student(String name, double score) {
        this.name = name;
        this.score = score;
    }
}

直接修改原对象,通过代码传递,这时,可以用Consumer写一个通用的方法,比如:

public static <E> void foreach(List<E> list, Consumer<E> consumer) {
    for (E e : list) {
        consumer.accept(e);
    }
}

 

public static void main(String[] args) {
    List<Student> students = Arrays.asList(new Student[]{
            new Student("zhangsan", 80d),
            new Student("lisi", 89d),
            new Student("wangwu", 98d)});

    foreach(students, t -> t.setName(t.getName().toUpperCase()));
    System.out.println("students:" + students.toString());

}

 

posted @ 2020-09-18 14:47  草木物语  阅读(301)  评论(0)    收藏  举报