java的lambda妙用举例

以下是 Java Lambda 表达式的 7 个进阶应用场景及示例,结合历史对话未覆盖的典型用法和搜索结果的补充信息整理而成:


一、替代 Runnable 实现多线程

传统匿名内部类:

java 复制代码
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println(" 传统方式");
    }
}).start();

Lambda 简化:

java 复制代码
new Thread(() -> System.out.println("Lambda  线程启动")).start();

优势:代码量减少 60%,直接聚焦核心逻辑。


二、配合 Optional 安全处理空值

java 复制代码
Optional.ofNullable(user.getName()) 
        .filter(name -> name.length()  > 3)  // 过滤短用户名 
        .map(String::toUpperCase)           // 转换为大写 
        .ifPresentOrElse(
            name -> System.out.println(" 有效用户名: " + name),
            () -> System.out.println(" 用户名为空")
        );

作用 :避免 NullPointerException,链式操作更安全。


三、实现自定义策略模式

java 复制代码
// 定义策略接口
interface PaymentStrategy {
    void pay(double amount);
}
 
// Lambda 实现不同支付策略
PaymentStrategy creditCard = (amount) -> 
    System.out.println(" 信用卡支付: " + amount);
PaymentStrategy paypal = (amount) -> 
    System.out.println("PayPal  支付: " + amount);
 
// 调用示例 
creditCard.pay(100.0);   // 输出:信用卡支付: 100.0

价值:无需创建多个实现类,动态替换行为。


四、CompletableFuture 异步回调

java 复制代码
CompletableFuture.supplyAsync(()  -> {
        // 模拟耗时操作 
        return "异步结果";
    })
    .thenApplyAsync(result -> result + "处理后")
    .thenAccept(finalResult -> 
        System.out.println(" 最终结果: " + finalResult)
    );

场景:非阻塞式处理耗时任务(如网络请求、IO操作)。


五、文件操作与流处理

java 复制代码
Files.list(Paths.get("/data")) 
     .filter(path -> path.toString().endsWith(".txt"))   // 过滤文本文件 
     .map(path -> {
         try { return Files.readString(path);  }
         catch (IOException e) { return ""; }
     })
     .forEach(content -> System.out.println(" 内容: " + content.substring(0,  20)));

亮点:结合 NIO 实现声明式文件处理。


六、动态条件过滤(Predicate 组合)

java 复制代码
Predicate<String> isLong = s -> s.length()  > 5;
Predicate<String> containsA = s -> s.contains("A"); 
 
List<String> words = Arrays.asList("Apple",  "Banana", "Pear");
List<String> filtered = words.stream() 
                             .filter(isLong.and(containsA)) 
                             .collect(Collectors.toList());   // 输出: [Banana]

技巧 :通过 and/or 组合多个条件,提升复用性。


七、定时任务调度(结合 ScheduledExecutorService)

java 复制代码
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
scheduler.scheduleAtFixedRate( 
    () -> System.out.println(" 定时执行: " + LocalTime.now()),  
    0, 1, TimeUnit.SECONDS  // 立即开始,每秒执行
);

应用 :替代 TimerTask,更灵活的周期任务控制。


附:Lambda 使用注意事项

  1. 变量捕获限制 :
    只能捕获 final 或等效 final 的局部变量 (示例:int count = 0; Runnable r = () -> count++; 会编译报错)。
  2. 方法引用简化 :
    当逻辑仅为调用现有方法时,优先用 对象::方法 或 类::静态方法(如 list.forEach(System.out::println) )。
  3. 并行流谨慎使用 :
    数据量小时可能降低性能,需通过 parallelStream().sequential() 灵活切换
相关推荐
小羊没烦恼!4 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里4 天前
java中的继承和多态的区别
java
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕4 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖4 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时4 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang4 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi4 天前
mysql 查询所有表名并授权
java
ProcessOn官方账号4 天前
java函数式编程--入门基础
java·编程·函数式编程