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

时间:2018-01-26 09:51:07

标签: java intellij-idea lambda java-8 refactoring

我的代码如下所示:

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进行重构?

3 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

首先。 IntelliJ IDEA会警告您使用Stream.of()代替Arrays#Stream,因为您没有提供Array而只提供两个String

修好后,只需点击alt + 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 + "!");
}