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



我的代码如下所示:

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,单击"提取到方法参考"。

首先,对x + "!"代码执行重构提取方法。然后使用快速修复替换为方法引用

首先。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 + "!");
}

最新更新