【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!
    }
}
复制代码

 

posted @   忱康  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示