在 Java 8 及以后的版本中,引入了许多函数式编程的特性,其中最重要的就是内置的函数式接口。这些接口使得编写更简洁、可读性更强的代码成为可能。今天我将介绍四个常用的内置接口:Predicate
、Function
、Consumer
和 Supplier
,并提供示例代码以帮助理解其用法。
1. Supplier 接口
Supplier<T>
是一个供给型接口,它没有输入参数,但会返回一个类型为 T
的对象。常用于需要延迟计算或生成对象的场景。
源码
示例
package com.school;
import java.util.Arrays;
import java.util.function.Supplier;
/**
* 文件名: null.java
* 作者: 20526
* 创建时间: 2024/9/8 14:08
* 描述:Supplier接口
*/
public class SupplierDemo {
public static void main(String[] args) {
testSupplier(()->{
int[] arr = {1, 2, 20, 4, 9};
Arrays.sort(arr);
return arr[arr.length - 1];
});
}
/**
* 供给型接口Supplier<T>的使用
* 传入一个泛型参数T,返回类型为T的对象
*/
public static void testSupplier(Supplier<Integer> supplier) {
int max = supplier.get();
System.out.println("最大值: " + max);
}
}
2. Consumer 接口
Consumer<T>
是一个消费型接口,它接受一个类型为 T
的输入参数,但没有返回值。常用于执行某些操作,例如打印或处理数据。
源码
示例
package com.school;
import java.util.function.Consumer;
/**
* 文件名: null.java
* 作者: 20526
* 创建时间: 2024/9/8 14:14
* 描述:Consumer接口
*/
public class ConsumerDemo {
public static void main(String[] args) {
//Lambda表达式作省略写法
testconsume( s-> System.out.println(s.toUpperCase()));
// 使用匿名内部类实现Consumer接口
testconsume(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s.toUpperCase());
}
});
}
/**
* 消费型接口Consumer
* 传入一个泛型T,没有返回值,用于消费数据
*/
public static void testconsume(Consumer<String> consumer) {
System.out.println("a a a");
consumer.accept("Hello World");
}
}
3. Function 接口
Function<T, R>
是一个函数型接口,它接受一个类型为 T
的输入参数,并返回一个类型为 R
的结果。常用于转换数据类型或执行某些计算。
源码
示例
package com.school;
import java.util.function.Function;
/**
* 文件名: null.java
* 作者: 20526
* 创建时间: 2024/9/8 14:30
* 描述:Function接口
*/
public class FunctionDemo {
public static void main(String[] args) {
getNumber( s -> Integer.parseInt(s));
}
public static void getNumber(Function<String, Integer> function) {
Integer i = function.apply("123");
System.out.println("i = "+i);
}
}
4. Predicate 接口
Predicate<T>
是一个断言型接口,它接受一个类型为 T
的输入参数,并返回一个布尔值。常用于过滤或测试条件。
源码
示例
package com.school;
import java.util.function.Predicate;
/**
* 文件名: PredicateDemo.java
* 作者: 20526
* 创建时间: 2024/9/8 14:45
* 描述: Predicate接口
*/
public class PredicateDemo {
public static void main(String[] args) {
testPredicate(s -> s.length() > 5);
}
public static void testPredicate(Predicate<String> predicate) {
String testString = "HelloWorld";
boolean result = predicate.test(testString);
System.out.println("字符串长度大于5: " + result);
}
}
总结
Java 的内置函数式接口提供了强大的功能,使得开发者能够以更简洁的方式编写代码。通过 Supplier
、Consumer
、Function
和 Predicate
,我们可以轻松地实现延迟计算、数据处理、类型转换和条件判断。这些接口在 Java 8 的流式 API 中得到了广泛应用,极大地提升了代码的可读性和可维护性。希望对你有所帮助。