Замените лямбда-выражение эквивалентным методом в IntelliJ IDEA - PullRequest
0 голосов
/ 26 марта 2020

Существует ли рефакторинг Intellij IDEA, который может заменить лямбда-выражение на функцию и ссылку на функцию?

У меня есть:

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();
}

Существует рефакторинг для извлечения анонимного класса, но на самом деле это нечто иное.

Ответы [ 3 ]

3 голосов
/ 26 марта 2020

Вы можете сделать это в два этапа:
1. выберите деталь "" + bean.getA() + "/" + bean.getB() и нажмите Cmd + Alt + M (метод извлечения). это создаст ваш метод и даст вам beans.stream().map(bean -> convertToASlashB(bean)).collect(toList()).
2. щелкните правой кнопкой мыши по лямбде (она будет выделена серым цветом) и выполните «заменить лямбду ссылкой на метод»

1 голос
/ 26 марта 2020

Вы можете go в строке нажать 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();
}
0 голосов
/ 26 марта 2020

В IntelliJ IDEA так много опций рефакторинга, что нелегко найти правильный или даже найти меню, в котором он находится в X) Подсказка от ответа LinuxServers ведет меня в правильном направлении.

Есть два варианта:

  1. Поместите курсор в лямбду и нажмите ALT-ENTER и выберите «Извлечь в метод ссылки»
  2. Выберите тело лямбды и выполните рефакторинг «Извлечь метод» (из Главное меню или из Refactor В этом меню или CTRL-ALT-M) сразу же следует быстрое исправление ALT-ENTER «Заменить лямбда на ссылку метода»
...