java.util.function
包提供了许多函数式接口,这些接口可以以函数式编程的风格编写代码。以下是一些常见接口的使用示例:
- Function<T, R>:
这个接口用于表示一个接受类型为T的参数并返回类型为R的结果的函数。
Function<String, Integer> stringToInt = (String s) -> Integer.parseInt(s); Integer number = stringToInt.apply("123"); // number will be 123
- Consumer:
这个接口用于表示一个接受类型为T的参数并执行某些操作的函数,通常用于消费数据而不是返回结果。
Consumer<String> printString = (String s) -> System.out.println(s); printString.accept("Hello, World!"); // 输出 "Hello, World!"
- Predicate:
这个接口用于表示一个接受类型为T的参数并返回布尔值的函数,通常用于判断条件。
Predicate<String> isEmpty = (String s) -> s.isEmpty(); boolean condition = isEmpty.test(""); // condition will be true
- Supplier:
这个接口用于表示一个没有参数但返回类型为T的结果的函数,通常用于提供值。
Supplier<String> randomString = () -> "Random String"; String random = randomString.get(); // 获取一个随机字符串
- UnaryOperator:
这个接口用于表示一个接受类型为T的参数并返回相同类型的结果的函数,通常用于一元操作。
UnaryOperator<String> toUpperCase = String::toUpperCase; String upperCase = toUpperCase.apply("hello"); // upperCase will be "HELLO"
- BinaryOperator:
这个接口用于表示一个接受两个相同类型T的参数并返回相同类型的结果的函数,通常用于二元操作。
BinaryOperator<Integer> add = (a, b) -> a + b; int sum = add.apply(10, 20); // sum will be 30
- BiFunction<T, U, R>:
这个接口用于表示一个接受两个参数,一个类型为T,另一个类型为U,并返回类型为R的结果的函数。
BiFunction<String, Integer, String> concatWithNumber = (String s, Integer i) -> s + i; String result = concatWithNumber.apply("Hello", 123); // result will be "Hello123"
通过这些接口,可以在Java 8及以上版本中编写更加简洁和表达力更强的代码。这些接口在集合操作、流式API(如Stream
)中尤其有用,因为它们提供了一种强大的方式来处理数据流。