预定义的函数式接口 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 @   草木物语  阅读(288)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示