【问题标题】:Lambda expression quizLambda 表达式测验
【发布时间】:2019-01-05 14:13:53
【问题描述】:

我已经定义了一个功能接口StringFormatter如下

public interface StringFormatter{
    String format(String s1, String s2);
}

如何编写主类来为上述接口创建 lambda 表达式并为以下 2 个结果定义 format()

  • 返回s1 + s2
  • 返回s1 + "-" + s2

【问题讨论】:

  • StringFormatter func = (s1, s2) -> s1 + s2;?然后拨打String result = func.format("first","second");

标签: java-8


【解决方案1】:

在这种情况下,您可以轻松地初始化两个包含 lambda 表达式的变量,例如:

StringFormatter formatter1 = (s1,s2) -> s1 + s2;
StringFormatter formatter2 = (s1,s2) -> s1 + "-" + s2;

然后你可以拨打formatter1.format(s1,s2)formatter2.format(s1,s2)

以下示例:

public class Test {

    public interface StringFormatter{
        String format(String s1, String s2);
    }

    public static void main(String[] args) {
        final StringFormatter formatter1 = (s1,s2) -> s1 + s2;
        final StringFormatter formatter2 = (s1,s2) -> s1 + "-" + s2;

        System.out.println(formatter1.format("lorem", "ipsum"));
        System.out.println(formatter2.format("lorem", "ipsum"));
    }
}

产生输出:

loremipsum
lorem-ipsum

【讨论】:

  • 谢谢!我已经声明了一个 String s1 & s2 然后再次在 StringFormatter formatter1 = (s1, s2) -> s1 + s2; 中使用它,所以,它给了我一个错误
  • 是的,lambda 的形式参数不能用用于局部变量的标识符命名(编译器应该已经为你解释过了)。
【解决方案2】:

我们可以像这样使用函数式接口作为目标类型:

StringFormatter func = (s1, s2) -> s1 + s2;

在这种情况下,您可以这样称呼它:

String result = func.format("first","second");

您也可以将逻辑放入方法中:

static String formatter(StringFormatter func, String s1, String s2){
       return func.format(s1, s2);
}

然后调用它:

String result = formatter((s1, s2) -> s1 + s2, "first", "second");
String anotherResult = formatter((s1, s2) -> s1 +"-"+ s2, "first", "second");

在这种情况下,您只需直接传递行为,而无需为每个场景创建不同的内联函数。

【讨论】:

    【解决方案3】:

    你可以这样写:

    StringFormatter formatter1 = (s1, s2) -> s1 + s2;
    
    StringFormatter formatter2 = (s1, s2) -> s1 + "-" + s2;
    

    用法:

    String result1 = formatter1.format("a", "b"); // ab
    
    String result2 = formatter2.format("a", "b"); // a-b
    

    【讨论】:

      【解决方案4】:
          StringFormatter formatter = (str1,str2) -> str1 + str2;
          StringFormatter formatter1 = (str1,str2) -> str1 + "-" + str2;
      
          String formatedString = formatter.format("Hello", "World");
          String formatedString1 = formatter1.format("Hello", "World");
      
          System.out.println("Formated String (Type 1) : "+formatedString);
          System.out.println("Formated String (Type 2) : "+formatedString1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-02
        • 1970-01-01
        • 2014-04-08
        相关资源
        最近更新 更多