【Java】函数式接口示例
Java的函数式接口提供了更简洁和声明性的方式来处理数据。以下是一些使用Predicate<T>
、Function<T, R>
、Consumer<T>
和Supplier<T>
的代码示例
Predicate(谓词语句)
import java.util.function.Predicate; public class PredicateExample { public static void main(String[] args) { // 创建一个Predicate用于判断字符串长度是否大于5 Predicate<String> stringLengthCheck = (s) -> s.length() >= 5; // 使用Predicate测试字符串 System.out.println(stringLengthCheck.test("Hello")); // 输出:true System.out.println(stringLengthCheck.test("Hi")); // 输出:false // 可以将多个Predicate通过逻辑运算组合起来 Predicate<String> startsWithA = s -> s.startsWith("A"); Predicate<String> containsB = s -> s.contains("B"); // 逻辑与操作 Predicate<String> combinedPredicate = startsWithA.and(containsB); System.out.println(combinedPredicate.test("AppleBanana")); // 输出:true System.out.println(combinedPredicate.test("An Apple")); // 输出:false System.out.println(combinedPredicate.test("A Banana")); // 输出:true } }
Function<T, R>(转换或映射)
import java.util.function.Function;
public static void main(String[] args) { // 创建一个Function,用于将字符串转为大写 Function<String, String> toUpperCase = String::toUpperCase; // 应用Function到输入值上 String input = "hello world"; String output = toUpperCase.apply(input); System.out.println(output); // 输出:HELLO WORLD // 更复杂的转换,例如将字符串转换为整数并计算平方 Function<String, Integer> stringToInt = Integer::parseInt; Function<Integer, Integer> square = num -> num * num;
//Function<T, R>
接口中有一个方法叫做compose()
,它用于组合两个函数,使得结果是一个新的Function
对象。
// 当你有两个函数f和g时,compose()
方法允许你创建一个新的函数h,其行为是先应用g再应用f。数学上表示为:h(x) = f(g(x))。 Integer result = square.compose(stringToInt).apply("10"); System.out.println(result); // 输出:100 } }
Consumer(消费型接口,接收一个参数,无返回值)
import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; public class ConsumerExample { public static void main(String[] args) { List<String> names = new ArrayList<>(); names.add("Alice"); names.add("Bob"); names.add("Charlie"); // 创建一个Consumer,用于打印列表中的元素 Consumer<String> printer = name -> System.out.println(name); // 对列表中的每个元素应用Consumer names.forEach(printer); // 输出: // Alice // Bob // Charlie } }
Supplier(供应者接口,无参数,产生一个结果)
import java.util.function.Supplier; public class SupplierExample { public static void main(String[] args) { // 创建一个Supplier,用于生成随机数 Supplier<Integer> randomNumber = () -> (int)(Math.random() * 100); // 调用Supplier获取结果 int number = randomNumber.get(); System.out.println(number); // 每次运行可能输出不同的随机数(0-99之间) // 或者创建一个简单的返回固定字符串的Supplier Supplier<String> greeting = () -> "Hello, World!"; System.out.println(greeting.get()); // 输出:Hello, World! } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY