Java
Python前端运维数据库
Java
Java
  • 新特性
    • Record
    • Optional
  • 面向对象
    • 面向对象基础
    • 构造方法
    • 继承与多态
    • 接口
    • 修饰符
    • 代码块
    • 接口(Interface)
    • 枚举类
  • IO流
    • IO
      • 字节流
      • 字符流
      • 缓冲流
      • 转换流
      • 操作ZIP
      • File 对象
    • NIO
      • Channel和Buffer
      • 异步文件通道AsynchronousFileChannel
      • Selector
      • Path/Files/Pipe
  • 反射
  • 内存分配
  • 集合
    • 简介
    • List
    • Set
    • Map
    • EnumMap
  • 日期与时间
    • Date和Calendar
    • Java8 新时间 ✨
      • LocalDateTime
      • ZonedDateTime
      • Duration
    • 时间格式化
      • SimpleDateFromat
      • DateTimeFormatter ✨
    • Instant
    • 实践
  • 网络编程
    • IP 地址
    • 网络模型
    • TCP 编程
    • UDP 编程
    • HTTP 编程
  • 加密和安全
  • 并发编程
    • 多线程
    • 线程与进程的区别
    • 线程组和线程优先级
    • 线程池
    • 线程锁
  • 异步任务
    • Future
    • CompletableFuture
      • 开启异步任务
      • 串行任务方法
      • 并行任务方法
      • 任务结束方法
      • 异常处理方法
      • 查看状态方法
      • 设置任务结果方法
  • 执行系统命令
  • Stream 流
    • Stream 流的创建
    • Stream 流串行与并行
    • Stream 流中间操作
    • Stream 流终端操作
  • Lambda 表达式
    • Lambda 表达式简介
    • Lambda 表达式语法
    • 方法引用
  • String
  • StringBuffer
由 GitBook 提供支持
在本页
  • 静态方法引用
  • 非静态方法引用

这有帮助吗?

  1. Lambda 表达式

方法引用

方法引用是一种更简洁的 Lambda 表达式,可以通过方法名称来引用已存在的方法。方法引用通过 :: 操作符将方法和对象或类名分隔开来表示。

静态方法引用

interface Filter {
    boolean call(Student student);
}

class Student {
    private String name;
    private int age;
    private String gender;
    // 省略 getter 和 setter 方法
}

class Sample {
    public static void main(String[] args) {
        List<Student> students = List.of(
                new Student("张三", 10, "男"),
                new Student("李四", 20, "男"),
                new Student("王五", 30, "女")
        );
        // 过滤出成年的学生
        List<Student> filterPersons = Sample.filter(students, Sample::adult);

        students.stream()
                .filter(Sample::adult)      // 等价于 student -> student.getAge() >= 18
                .forEach(Sample::print);    // 等价于 student -> System.out.println(student);
    }

    static List<Student> filter(List<Student> students, Filter filter) {
        List<Student> result = new ArrayList<>();
        for (Student student : students) {
            if (filter.call(student)) {
                result.add(student);
            }
        }
        return result;
    }

    static Boolean adult(Student student) {
        return student.getAge() >= 18;
    }

    static void print(Student student) {
        System.out.println(student);
    }
}

非静态方法引用

interface Filter {
    boolean call(Student student);
}

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class Student {
    private String name;
    private int age;
    private String gender;
    // 省略 getter 和 setter 方法

    public boolean isMale() {
        return this.gender.equals("男");
    }
}

class Sample {
    class Util {
        Boolean adult(Student student) {
            return student.getAge() >= 18;
        }

        void print(Student student) {
            System.out.println(student);
        }
    }

    public static void main(String[] args) {
        List<Student> students = List.of(
                new Student("张三", 10, "男"),
                new Student("李四", 20, "男"),
                new Student("王五", 30, "女")
        );
        List<Student> filterPersons = Sample.filter(students, Student::isMale);

        students.stream()
                .filter(Student::isMale)      // 等价于 student -> student.isMale()
                .forEach(System.out::println);    // 等价于 student -> System.out.println(student);
    }

    static List<Student> filter(List<Student> students, Filter filter) {
        List<Student> result = new ArrayList<>();
        for (Student student : students) {
            if (filter.call(student)) {
                result.add(student);
            }
        }
        return result;
    }
}
上一页Lambda 表达式语法下一页String

最后更新于8个月前

这有帮助吗?