Lambda表达测验

时间:2017-12-30 14:37:13

标签: java-8

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

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

如何编写为上述接口创建lambda表达式的主类,并为低于2的结果定义format()

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

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");

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

答案 2 :(得分:2)

你可能会这样写:

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

答案 3 :(得分:0)

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