美文网首页
213. Java 函数式编程风格 - Java 中的简单 fo

213. Java 函数式编程风格 - Java 中的简单 fo

作者: Cache技术分享 | 来源:发表于2025-10-16 08:49 被阅读0次

213. Java 函数式编程风格 - Java 中的简单 for 循环转换:从命令式到函数式


🔄 传统 for 循环的“仪式感” vs 函数式风格的“本质表达”

Java 中,最常见的循环形式之一就是:

for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

🚧 分析传统写法的“噪音”:

  • 本质(Essence):我们只是想“从 0 到 4 打印数字”。
  • 噪音(Ceremony):声明变量 i,初始化为 0,设定结束条件 <5,每次迭代自增 i++ —— 这些都与目标无关,只是为了实现迭代而写的“套路代码”。

✅ 使用函数式写法更专注于“做什么”

Java 8 引入的 Stream API,正好可以将这种“范围迭代”的代码简化为更直观的形式:

import java.util.stream.IntStream;

IntStream.range(0, 5)
         .forEach(System.out::println);

🌟 优势:

  • 简洁清晰
  • 直接表达“从 04 依次操作每个数字”
  • 没有可变变量(i 变成了隐式传入的参数)
  • 让你专注于“对每个数字要做什么”而非“如何控制循环”

📌 包含结束值的情况怎么办?

当我们需要迭代 包含结束值(例如从 05,包括 5)时,传统写法会变成:

for (int i = 0; i <= 5; i++) {
    System.out.println(i);
}

使用 IntStreamrangeClosed() 方法就可以实现完全等价的函数式写法:

IntStream.rangeClosed(0, 5)
         .forEach(System.out::println);

range():不包含结束值
rangeClosed()包含结束值


📚 小结:两种方式的对比

描述 命令式写法 函数式写法
打印 04 for (int i = 0; i < 5; i++) IntStream.range(0, 5)
打印 05(包含 5 for (int i = 0; i <= 5; i++) IntStream.rangeClosed(0, 5)
打印内容 System.out.println(i); .forEach(System.out::println)

🔧 更复杂的操作?没问题!

除了打印,我们可以对每个值进行任何操作,例如:

🌟 将 110之间的偶数存入列表:

命令式版本:

List<Integer> evens = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) {
        evens.add(i);
    }
}
System.out.println(evens);

函数式版本:

List<Integer> evens = IntStream.rangeClosed(1, 10)
                               .filter(i -> i % 2 == 0)
                               .boxed() // 将 int 转换为 Integer
                               .collect(Collectors.toList());
System.out.println(evens);

🧠 内部迭代 vs 外部迭代

方式 特点
外部迭代(for 循环) 开发者控制循环、变量递增、判断逻辑
内部迭代(Stream 系统自动控制迭代,我们只关注“对每个元素做什么”

内部迭代让我们摆脱循环控制的“机械操作”,专注于业务逻辑,代码更短、更清晰、更少出错。


✅ 总结:何时使用 IntStream 替代 for 循环?

使用 IntStream.range()rangeClosed() 的最佳时机:

  • ✅ 当你仅仅是 遍历整数范围
  • ✅ 当你不需要 breakcontinue 等复杂跳出逻辑
  • ✅ 当你想提升代码的 可读性、可维护性

💡 推荐实践

  1. 从你的代码中识别 for 循环
  2. 判断是否可以使用 IntStream 替代
  3. 替换时确保逻辑等价
  4. 利用现有自动化测试验证更改的正确性

相关文章

  • Java8函数式编程之一: 行为参数化

    Java8区别于以前的Java版本的一个重要特点就是函数式编程的风格。 那什么是函数式的编程风格呢? 理解函数式编...

  • 2018-09-21

    java学习笔记(二) 前一篇简单的介绍了Java8函数式编程,这篇还将继续函数式编程之旅。 流 在Java程序中...

  • 从源码角度学习java函数式编程

    Java 函数式编程 简单来说,函数式编程就是被注解@FunctionalInterface修饰的接口。 那么,函...

  • java之Lambda函数式编程最佳应用举例,链式语法「真干货来

    --java之Lambda函数式编程---- 背景 java 8 Lambda函数式编程,像阿里、腾讯这样的大互联...

  • Java与Kotlin的区别

    Java:面向对象编程,顶层是类ClassKotlin:函数式编程,顶层是函数,顶层属性,类存在于函数中在java...

  • Java 函数式编程

    从历史上看,用 Java 进行函数式编程并不容易,甚至一些函数式编程在 Java 中是不可能实现的。在 Java...

  • Java lambda表达式

    1. Java函数式接口 Java实现函数式编程的方式是函数式接口(functional interface),函...

  • Java 8 函数式编程

    Java 8 函数式编程 java.util.function.*@FunctionalInterface都是函数...

  • Java8 函数式编程

    Java 8 函数式编程 本次主题主要介绍什么是函数式编程,其主要特点, 以及它在 Java8 中是怎么体现的.函...

  • Scala编程:函数式编程

    函数式编程 引言 Scala中的函数是Java中完全没有的概念。因为Java是完全面向对象的编程语言,没有任何面向...

网友评论

      本文标题:213. Java 函数式编程风格 - Java 中的简单 fo

      本文链接:https://www.haomeiwen.com/subject/vtvntstx.html