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() 灵活切换
相关推荐
斑马1393 小时前
Linux软件编程学习笔记(十二)——TCP并发服务器模型
java·服务器·网络
冬栈程序设计3 小时前
Springboot宿舍管理系统【670099】 -附源码(开箱即用)
java·毕业设计·springboot·课程设计·程序设计·大作业
2601_962284503 小时前
北京Java全栈开发培训 Web前端开发 软件测试就业培训班
java·软件测试·web前端·全栈开发·就业培训
qiaosaifei3 小时前
JAVA老项目中有大量的类名_编译时报找不到符号错误
java·开发语言
聪明蛋子哟3 小时前
MCP协议深度落地:如何用Python/Java双语言实现统一的工具调用网关?
java·开发语言·python
文子越来越强4 小时前
【双因子认证】拦截注解@MFACheck 接入指南(其他微服务如何用)
java
ZGG0034 小时前
线程池详解:从 7 大参数到生产避坑
java·数据库·后端
迪康Defender4 小时前
公用电脑责任追溯难?迪康端点安全一体化管理系统用户模式详解
java·运维·开发语言·网络·其他·安全
京师20万禁军教头5 小时前
47-常用类-八大包装类(Wrapper Classes)
java
come112345 小时前
剪映零基础教程
java·linux·运维