You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用OpenRewrite为Java Stream API调用添加换行符?

使用OpenRewrite格式化Java流式调用代码

核心思路

OpenRewrite提供了代码格式化能力,既可以用内置规则实现标准风格的代码格式化,也能自定义规则精准处理链式调用的换行与缩进,满足将紧凑流式调用拆分为每行一个方法的需求。

具体实现

1. 方案一:使用内置格式化规则

OpenRewrite的org.openrewrite.java.Format内置规则遵循标准Java代码风格,会自动将链式调用的每个方法单独换行并添加缩进。只需在Rewrite配置文件(如rewrite.yml)中添加如下配置:

type: specs.openrewrite.org/v1beta/recipe
name: com.yourorg.FormatStreamChain
displayName: 格式化流式调用代码
recipeList:
  - org.openrewrite.java.Format

2. 方案二:自定义精准格式化规则

如果需要仅针对流式API链式调用做处理,避免影响其他代码格式,可以编写自定义规则:

package com.yourorg;

import org.openrewrite.*;
import org.openrewrite.java.tree.*;

public class FormatStreamChain extends Recipe {
    @Override
    public String getDisplayName() {
        return "格式化流式链式调用";
    }

    @Override
    public String getDescription() {
        return "将Java流式调用的每个方法单独换行并缩进";
    }

    @Override
    public TreeVisitor<?, ExecutionContext> getVisitor() {
        return new JavaIsoVisitor<ExecutionContext>() {
            @Override
            public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, ExecutionContext ctx) {
                J.MethodInvocation processedMethod = super.visitMethodInvocation(method, ctx);
                // 判断当前调用是否属于链式调用的后续节点
                if (processedMethod.getSelect() instanceof J.MethodInvocation) {
                    // 为当前方法调用添加换行和缩进
                    return processedMethod.withPrefix(Space.EMPTY.withWhitespace("\n  "));
                }
                return processedMethod;
            }
        };
    }
}

3. 效果验证

将规则应用到目标代码后,原本紧凑的写法:

List.of(1, 2, 3)
.stream().map(integer -> integer * integer).filter(integer -> integer % 2 == 0).collect(Collectors.toSet());

会被格式化为:

List.of(1, 2, 3)
  .stream()
  .map(integer -> integer * integer)
  .filter(integer -> integer % 2 == 0)
  .collect(Collectors.toSet());

补充说明

  • 内置Format规则默认遵循IntelliJ IDEA的代码风格,若需调整缩进宽度等细节,可通过配置org.openrewrite.java.format.JavaFormatter修改参数。
  • 自定义规则更适合针对性场景,不会干扰其他代码的原有格式。

内容的提问来源于stack exchange,提问作者Alexander Kazantsev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 02:15:54