![](/img/trans.png)
[英]Replace lambda expression with equivalent code in IntelliJ IDEA
[英]Replace lambda expression with equivalent method in IntelliJ IDEA
是否有 Intellij IDEA 重構可以用函數和函數引用替換 lambda 表達式?
我有:
List<String> convertToASlashBList(Collection<MyBean> beans) {
return beans.stream().map(bean -> "" + bean.getA() + "/" + bean.getB()).collect(toList());
}
我想要:
List<String> convertToASlashBList(Collection<MyBean> beans) {
return beans.stream().map(this::convertToASlashB).collect(toList());
}
private String convertToASlashB(MyBean bean) {
return "" + bean.getA() + "/" + bean.getB();
}
有重構以提取匿名類,但這實際上是不同的。
您可以分兩步完成:
1.選擇"" + bean.getA() + "/" + bean.getB()
部分,按Cmd
+ Alt
+ M
(提取方法)。 這將創建您的方法並為您提供beans.stream().map(bean -> convertToASlashB(bean)).collect(toList())
。
2. 右鍵單擊您的 lambda(它將變灰)並執行“用方法引用替換 lambda”
您可以按ALT+ENTER
轉到該行,也許他們會顯示選項以將其替換為其他選項(可能會更改功能)。
我不知道你真正需要什么,但我在這里留下了一個例子。
例子:
List<String> convertToASlashBList(Collection<MyBean> beans) {
List<String> converted = new ArrayList<>();
for (MyBean bean : beans) {
converted.add(convertToASlashB(bean));
}
return converted;
}
private String convertToASlashB(MyBean bean) {
return "" + bean.getA() + "/" + bean.getB();
}
IntelliJ IDEA 中有太多的重構選項,要找到正確的選項,甚至找到它所在的菜單都不容易 X) LinuxServers 答案中的提示將我引向了正確的方向。
有兩種選擇:
ALT-ENTER
並選擇“提取到方法引用”CTRL-ALT-M
),然后立即執行快速修復ALT-ENTER
“用方法引用替換 lambda”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.