我的代码如下所示:
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 + "!");
}