Java 8 Lambda表情测验

Java 8 Lambda表情测验,java-8,Java 8,我已经定义了一个功能接口StringFormatter,如下所示 public interface StringFormatter{ String format(String s1, String s2); } 如何编写为上述接口创建lambda表达式并为以下2个结果定义format()的主类 返回s1+s2 返回s1+“-”+s2 您可以这样写: StringFormatter formatter1 = (s1, s2) -> s1 + s2; StringFormatte

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

public interface StringFormatter{
    String format(String s1, String s2);
}
如何编写为上述接口创建lambda表达式并为以下2个结果定义
format()
的主类

  • 返回
    s1+s2
  • 返回
    s1+“-”+s2

    • 您可以这样写:

      StringFormatter formatter1 = (s1, s2) -> s1 + s2;
      
      StringFormatter formatter2 = (s1, s2) -> s1 + "-" + s2;
      
      StringFormatter func = (s1, s2) -> s1 + s2;
      
      用法:

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

      在这种情况下,您可以轻松初始化包含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
      

      我们可以使用功能接口作为目标类型,如下所示:

      StringFormatter formatter1 = (s1, s2) -> s1 + s2;
      
      StringFormatter formatter2 = (s1, s2) -> s1 + "-" + s2;
      
      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");
      

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

      StringFormatter func=(s1,s2)->s1+s2?然后调用
      String result=func.format(“第一”、“第二”)谢谢!我声明了一个字符串s1&s2,然后在StringFormatter formatter1=(s1,s2)->s1+s2中再次使用它;所以,它给了我一个错误是,lambda的形式参数不能用用于局部变量的标识符命名(编译器应该为您解释)。
      
          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);