如何像其他方法一样配置intellij Java格式化程序以格式化.stream()

max*_*usi 5 java intellij-idea

我正在尝试将IntelliJ格式化程序设置为对流使用与其他方法调用相同的换行格式。

如果我得到的代码行超过了100个字符的限制,则IntelliJ会像这样格式化它:

StringBuilder stringBuilder = new StringBuilder();
stringBuilder
    .append("foo")
    .append("foo")
    .append("foo")
    .append("foo")
    .append("foo")
    .append("foo")
    .append("foo")
    .append("foo");
Run Code Online (Sandbox Code Playgroud)

如果我得到的代码行中包含的流也超过了100个字符的限制,则intellij在stream语句后开始新行:

List<Integer> list = new ArrayList<>();
list.subList(0, 2).stream()
    .filter(foo -> foo.equals(foo))
    .filter(foo -> foo.equals(foo))
    .filter(foo -> foo.equals(foo));
Run Code Online (Sandbox Code Playgroud)

如何告诉格式化程序像其他方法一样对流进行相同的格式化?

List<Integer> list = new ArrayList<>();
list
    .subList(0, 2)
    .stream()
    .filter(foo -> foo.equals(foo))
    .filter(foo -> foo.equals(foo))
    .filter(foo -> foo.equals(foo));
Run Code Online (Sandbox Code Playgroud)

仅当代码行超过100个字符的限制时,才应使用此格式,否则应保持一行。

编辑:我将intellij版本更新为2019.2,然后重新导入了CodeStyle xml。现在我无法重现我的问题了。

Eri*_*sen 0

我无法使用 IntelliJ IDEA Ultimate 2019.2 重现该问题。我创建了以下课程:

public class Foo {

    void bar() {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("foo").append("foo").append("foo").append("foo").append("foo").append("foo").append("foo").append("foo");

        List<Integer> list = new ArrayList<>();
        list.subList(0, 2).stream().filter(foo -> foo.equals(foo)).filter(foo -> foo.equals(foo)).filter(foo -> foo.equals(foo));
    }

}
Run Code Online (Sandbox Code Playgroud)

重新格式化(CTRL+ALT+L)后,代码如下所示:

public class Foo {

    void bar() {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder
                .append("foo")
                .append("foo")
                .append("foo")
                .append("foo")
                .append("foo")
                .append("foo")
                .append("foo")
                .append("foo");

        List<Integer> list = new ArrayList<>();
        list
                .subList(0, 2)
                .stream()
                .filter(foo -> foo.equals(foo))
                .filter(foo -> foo.equals(foo))
                .filter(foo -> foo.equals(foo));
    }

}
Run Code Online (Sandbox Code Playgroud)

以下是我的 XML 代码样式设置:

<code_scheme name="Project" version="173">
  <codeStyleSettings language="JAVA">
    <option name="ALIGN_MULTILINE_CHAINED_METHODS" value="true" />
    <option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
    <option name="METHOD_PARAMETERS_WRAP" value="2" />
    <option name="THROWS_LIST_WRAP" value="1" />
    <option name="METHOD_CALL_CHAIN_WRAP" value="2" />
    <option name="WRAP_FIRST_METHOD_IN_CALL_CHAIN" value="true" />
    <option name="BINARY_OPERATION_WRAP" value="1" />
    <option name="ARRAY_INITIALIZER_WRAP" value="1" />
  </codeStyleSettings>
</code_scheme>
Run Code Online (Sandbox Code Playgroud)