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() 灵活切换
相关推荐
invicinble5 小时前
springboot提供的机制大全
java·spring boot·后端
Han_han9195 小时前
题⽬ 4:订单商品统计:
java
彦为君5 小时前
JavaSE-11-ByteBuffer(NIO核心组件)
java·开发语言·前端·数据库·后端·spring·nio
Kiling_07045 小时前
面向对象和集合编程题 ( 二 )
java·开发语言·数据结构·算法
菜鸡儿齐5 小时前
Future接口学习
java·服务器·开发语言
过期动态5 小时前
【LeetCode 热题 100】两数之和— 暴力法与哈希表法详解
java·数据结构·算法·leetcode·散列表
Refrain_zc6 小时前
Android开发在线音频播放器之章节三核心PlayerService
java
日月云棠6 小时前
17 Dubbo 2.7 集群容错策略源码解析
java·后端