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() 灵活切换
相关推荐
码智社18 分钟前
Java实现RSA密钥生成、加密解密、加签验签
java
wear工程师27 分钟前
ThreadLocal 在线程池里为什么会串数据:别只会答内存泄漏
java·后端
Iruoyaoxh27 分钟前
栈和队列~
java·开发语言
审小匠OpenCPAi31 分钟前
银行流水核查怎么自动化?单边匹配、双向勾稽与图聚类异常检测的工程对比
java·前端·人工智能·python·审计
码上上班1 小时前
docker课程
java·docker·容器
腻害兔1 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:CRM 客户关系模块深度解析——从线索到回款,一套完整的 B2B 销售闭环是怎么搭的?
java·前端·javascript·vue.js·产品经理·ai编程
达子6661 小时前
第9章_HarmonyOs图解 用Java开发UI
java·ui·harmonyos
龙虾PRO3 小时前
能源与股票量化核心差异,AI全链路落地实操手册
java·面试·职场和发展
llwszx3 小时前
【Java/Go后端手撸原生Agent(第九篇):Plan-and-Execute规划模式——从“走一步看一步“到“先谋后动“】
java·python·golang·agent开发·plan模式·规划执行模式
ZJH__GO3 小时前
网络编程v2--多客户端互通
java·运维·服务器·开发语言·计算机网络