函数式接口包含单个抽象方法,用于将行为作为数据传递。定义:使用 @functionalinterface 注解或包含单个抽象方法的简单接口。使用:通过 lambda 表达式或方法引用来实现。流中使用:用于过滤、映射和减少流中的元素。实战:可以通过自定义比较器按姓名或工资对对象列表进行排序。
深入解析 Java 中函数式接口的使用
函数式接口简介
函数式接口是一个包含单个抽象方法的接口。它允许将行为作为数据传递,这在使用 Java 8 及更高版本的函数式编程中非常有用。
定义函数式接口
可以通过 @FunctionalInterface 注解或仅包含一个抽象方法的简单接口来定义函数式接口:
@FunctionalInterface public interface MyFunction { int apply(int x); }
使用函数式接口
函数式接口可以通过 lambda 表达式或方法引用来实现:
立即学习“Java免费学习笔记(深入)”;
Lambda 表达式:
MyFunction f = (x) -> x * x;
方法引用:
MyFunction f = Math::sqrt;
流中的函数式接口
函数式接口在流处理中尤为重要。它们用于过滤、映射和减少流中的元素:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); // 筛选大于 3 的数字 List<Integer> filteredNumbers = numbers.stream() .filter(x -> x > 3) .toList(); // 映射每个数字为其平方 List<Integer> squaredNumbers = numbers.stream() .map(x -> x * x) .toList();
实战案例:自定义比较器
我们可以使用函数式接口来创建自定义的比较器。考虑一个 Employee 类:
public class Employee { private String name; private int salary; }
我们可以定义一个函数式接口 EmployeeComparator 来比较员工:
@FunctionalInterface public interface EmployeeComparator { int compare(Employee e1, Employee e2); }
然后,我们可以使用 lambda 表达式实现这个比较器,根据姓名或工资比较员工:
// 根据姓名比较 EmployeeComparator compareByName = (e1, e2) -> e1.getName().compareTo(e2.getName()); // 根据工资比较 EmployeeComparator compareBySalary = (e1, e2) -> Integer.compare(e1.getSalary(), e2.getSalary());
现在,我们可以使用 EmployeeComparator 对员工列表进行排序:
List<Employee> employees = Arrays.asList(e1, e2, e3, e4); // 按照姓名排序 employees.sort(compareByName); // 按照工资排序 employees.sort(compareBySalary);
以上就是深入解析 Java 中函数式接口的使用的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系 yyfuon@163.com