Function接口、Supplier接口和Consumer接口是Java 8中常用的函数式接口,它们分别用于表示不同的函数类型,具有不同的特点和使用场景:
-
Function接口:
- 功能:表示接受一个参数并返回结果的函数。
- 方法:定义了一个
apply
方法,用于执行函数的逻辑操作。 - 使用场景:常用于对输入进行转换、映射或组合操作,例如数据转换、映射处理、计算操作等。在Stream API中广泛应用于对流中的元素进行处理和映射操作。
-
Supplier接口:
- 功能:表示一个供给型的接口,不接受任何参数但返回一个指定类型的结果。
- 方法:定义了一个
get
方法,用于获取结果。 - 使用场景:常用于延迟计算、惰性求值或提供默认值的场景,例如延迟加载对象、生成随机数、提供默认值等。
-
Consumer接口:
- 功能:表示一个消费型的接口,接受一个参数进行处理,但没有返回结果。
- 方法:定义了一个
accept
方法,用于执行消费逻辑。 - 使用场景:常用于对集合中的元素进行处理,例如遍历集合并对每个元素执行某种操作,对元素进行消费处理、打印、保存到数据库等。
使用场景示例:
- Function接口:适用于需要对输入进行转换、映射或计算操作的场景,例如在数据处理、映射转换、计算逻辑等方面。
例子
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
class Employee {
String name;
double salary;
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
}
public class FunctionComplexExample {
public static void main(String[] args) {
List<Employee> employees = Arrays.asList(
new Employee("Alice", 60000),
new Employee("Bob", 80000),
new Employee("Carol", 90000)
);
// 创建一个Function对象,用于计算年终奖金额
Function<Employee, Double> calculateBonus = employee -> employee.salary * 0.1;
// 使用Stream和Function对象计算并打印每个员工的年终奖金额
employees.stream()
.map(emp -> "Employee: " + emp.name + ", Bonus: " + calculateBonus.apply(emp))
.forEach(System.out::println);
}
}
- Supplier接口:适用于需要提供默认值、延迟加载或动态生成数据的场景,例如在惰性加载对象、生成随机数、提供默认配置等方面。
例子
import java.util.function.Supplier;
public class SupplierExample {
public static void main(String[] args) {
// 创建一个Supplier对象,提供默认的字符串
Supplier<String> defaultStringSupplier = () -> "Default Value";
// 获取Supplier提供的默认字符串
String result = defaultStringSupplier.get();
System.out.println(result); // 输出结果为 "Default Value"
}
}
- Consumer接口:适用于需要对集合中的元素进行处理、消费或打印输出的场景,例如在遍历集合并对每个元素进行操作、执行消费处理等方面。
例子
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
class Product {
String name;
double price;
public Product(String name, double price) {
this.name = name;
this.price = price;
}
}
public class ConsumerComplexExample {
public static void main(String[] args) {
List<Product> products = Arrays.asList(
new Product("Laptop", 800.00),
new Product("Phone", 500.00),
new Product("Watch", 300.00)
);
// 创建一个Consumer对象,用于处理符合条件的产品
Consumer<Product> expensiveProductConsumer = product -> {
if (product.price > 500.00) {
System.out.println("Expensive product: " + product.name);
}
};
// 使用Stream和Consumer对象对产品进行处理
products.stream().forEach(expensiveProductConsumer);
}
}
在日常的开发中多多使用,还是很不错的,方便快捷直观。你学会了!!!