繁体   English   中英

如何将lambda表达式重构为方法引用?

[英]How to refactor a lambda expression to a method reference?

我的代码看起来像这样:

class A {
    public void m() {
        Arrays.stream("a", "b")
            .map(x -> x + "!") // <-- lambda expression
            .forEachOrdered(System.out::println);
    }
}

我想将它重构为:

class A {
    public void m() {
        Arrays.stream("a", "b")
            .map(this::t) // <-- method reference
            .forEachOrdered(System.out::println);
    }

    public String t(String x) {
        return x + "!";
    }
}

如何使用IntelliJ进行重构?

选择lambda,按Alt + Enter,单击“Extract to Method Reference”。

首先,在x + "!"上进行重构提取方法 码。 然后使用快速修复替换方法引用

首先。 IntelliJ IDEA会警告你使用Stream.of()而不是Arrays#Stream ,因为你没有提供一个Array但只提供两个String

修好之后,只需点击alt +在x -> x+ "!"某个地方enter站立x -> x+ "!" 并按Extract to Method reference

但公平地说......如果这一小段代码是“真正的交易”,那么请不要。 它会降低可读性。

为此你最好用以下东西:

System.out.println(String.join("!\n", new String[]{"a", "b"}));

要么

Stream.of("a", "b").forEach(s -> System.out.printLn(s + "!"));

甚至更好:

for (String s : Arrays.asList("a", "b")) {
  System.out.println(s + "!");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM