函数接口: 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()); }