簡體   English   中英

用 IntelliJ IDEA 中的等效方法替換 lambda 表達式

[英]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 答案中的提示將我引向了正確的方向。

有兩種選擇:

  1. 將光標置於 lambda 中並按ALT-ENTER並選擇“提取到方法引用”
  2. 選擇 lambda 主體並立即執行重構“提取方法”(從主菜單或重構此菜單或CTRL-ALT-M ),然后立即執行快速修復ALT-ENTER “用方法引用替換 lambda”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM