当前位置: 首页 > news >正文

212. Java 函数式编程风格 - Java 编程风格转换:命令式 vs 函数式(以循环为例)

文章目录

  • 212. Java 函数式编程风格 - Java 编程风格转换:命令式 vs 函数式(以循环为例)
    • 🎯 命令式 vs 函数式编程风格
      • ✅ 命令式(Imperative)
      • ✅ 函数式(Functional / Declarative)
    • 🔄 为什么要从命令式转向函数式?
    • 🔁 示例对比:转换常见的循环代码
      • 🌟 场景一:从列表中取出所有长度` > 3 `的字符串
        • 命令式版本:
        • 函数式版本:
      • 🌟 场景二:将所有字符串转换为大写并输出
        • 命令式:
        • 函数式:
      • 🌟 场景三:找出第一个长度大于` 4` 的名字(如果有)
        • 命令式:
        • 函数式:
    • 🚀 小技巧:转型建议
    • 🧠 总结:何时用函数式风格?

212. Java 函数式编程风格 - Java 编程风格转换:命令式 vs 函数式(以循环为例)


🎯 命令式 vs 函数式编程风格

Java8 之前,主要支持的是 面向对象 + 命令式编程。而从 Java 8 开始,引入了 函数式编程风格(Functional Programming),让我们可以使用 lambda 表达式、Stream API 等现代特性来简洁、表达式化地处理数据。

✅ 命令式(Imperative)

  • 告诉计算机做什么,也要告诉它怎么做
  • 通常是通过显式的 forwhile 循环来完成。
  • 比如:拿出列表中的偶数,加 1,存到新列表中。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = new ArrayList<>();
for (int number : numbers) {if (number % 2 == 0) {result.add(number + 1);}
}
System.out.println(result); // [3, 5]

✅ 函数式(Functional / Declarative)

  • 告诉计算机做什么,但不关心怎么做
  • 借助 Stream API,使用 filtermapcollect 等操作。
  • 更接近自然语言的描述,可读性高。
List<Integer> result = numbers.stream().filter(n -> n % 2 == 0).map(n -> n + 1).collect(Collectors.toList());System.out.println(result); // [3, 5]

🔄 为什么要从命令式转向函数式?

命令式风格的劣势 🚫函数式风格的优势 ✅
冗长、嵌套复杂简洁、清晰表达意图
代码可读性差更易维护、修改和调试
易引入状态错误更少副作用,更安全

函数式风格最初看起来可能有点陌生,但一旦掌握,就会发现它更符合人类的表达方式,也更容易组合、调试、并行化。


🔁 示例对比:转换常见的循环代码

🌟 场景一:从列表中取出所有长度> 3的字符串

命令式版本:
List<String> names = Arrays.asList("Tom", "Jerry", "Spike", "Tyke");
List<String> result = new ArrayList<>();for (String name : names) {if (name.length() > 3) {result.add(name);}
}System.out.println(result); // [Jerry, Spike]
函数式版本:
List<String> result = names.stream().filter(name -> name.length() > 3).collect(Collectors.toList());System.out.println(result); // [Jerry, Spike]

🌟 场景二:将所有字符串转换为大写并输出

命令式:
for (String name : names) {System.out.println(name.toUpperCase());
}
函数式:
names.stream().map(String::toUpperCase).forEach(System.out::println);

🌟 场景三:找出第一个长度大于 4 的名字(如果有)

命令式:
String result = null;
for (String name : names) {if (name.length() > 4) {result = name;break;}
}
System.out.println(result); // Spike
函数式:
Optional<String> result = names.stream().filter(name -> name.length() > 4).findFirst();result.ifPresent(System.out::println); // Spike

🚀 小技巧:转型建议

如果你已经有了命令式的代码,不妨遵循以下步骤来重构为函数式风格:

  1. 识别循环的目的:是过滤?变换?聚合?
  2. 查找可替代的 Stream 方法:如 filtermapreduce
  3. 消除中间变量:尽量用链式调用,保持表达力。
  4. 保持语义清晰:不要过度压缩代码,避免可读性差。

🧠 总结:何时用函数式风格?

使用函数式风格的最佳时机:

✅ 当你要对集合进行过滤、映射、聚合操作时
✅ 当你希望代码更简洁、更少状态管理
✅ 当你在重构旧代码、修 bug 或加新功能时

使用函数式风格不仅是语法优化,更是思维方式的升级

http://www.dtcms.com/a/490551.html

相关文章:

  • Ubuntu 24.04 修改 ssh 监听端口
  • 1千元以下做网站的公司wordpress sso插件开发
  • Pytorch神经网络工具箱
  • PyTorch DataLoader 高级用法
  • 怎么做一个网站app吗金华网站建设价格
  • 芷江建设局网站石家庄网站建设公司黄页
  • Excel表----VLOOKUP函数实现两表的姓名、身份证号码、银行卡号核对
  • XMLHttpRequest.responseType:前端获取后端数据的一把“格式钥匙”
  • office便捷办公06:根据相似度去掉excel中的重复行
  • Vue+mockjs+Axios 案例实践
  • http的发展历程
  • Python中使用HTTP 206状态码实现大文件下载的完整指南
  • AngularJS下 $http 上传文件
  • 如何弄死一个网站锡林郭勒盟建设工程造价管理网站
  • 【Node.js】为什么擅长处理 I/O 密集型应用?
  • 基于SpringBoot的无人机飞行管理系统
  • STM32的HardFault错误处理技巧
  • Tekever-固定翼无人机系统:模块化垂直起降、远程海上无人机、战术 ISR 无人机
  • Kafka Queue: 如何严格控制消息数量
  • 大兴建设网站wordpress 托管主机
  • 国外html响应式网站网站开发高级证
  • 苍穹外卖--04--Redis 缓存菜品信息、购物车
  • 大淘客网站如何做seowordpress o2o主题
  • 机器学习催化剂设计专题学习
  • (六)机器学习之图卷积网络
  • 告别刀耕火种:用 Makefile 自动化 C 语言项目编译
  • 【安卓开发】【Android】做一个简单的钢琴模拟器
  • C#控制反转
  • 【Java 开发日记】什么是线程池?它的工作原理?
  • 黄页网站数据来源wordpress 最新漏洞