代码之家  ›  专栏  ›  技术社区  ›  slartidan

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

  •  7
  • slartidan  · 技术社区  · 7 年前

    我的代码如下所示:

    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进行重构?

    3 回复  |  直到 7 年前
        1
  •  25
  •   Andy Turner    7 年前

    选择lambda,按Alt+Enter,单击“提取到方法参考”。

        2
  •  2
  •   Sergii Lagutin    7 年前

    首先,进行重构 提取方法 在…上 x + "!" 密码然后使用快速修复 替换为方法参考 .

        3
  •  0
  •   Nathan van Dalen    7 年前

    首先IntelliJ IDEA将警告您使用 Stream.of() 而不是 Arrays#Stream ,因为您没有提供 Array 但只有两个 String s

    修复后,只需点击 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 + "!");
    }