此表达式的目标类型必须是自定义接口

时间:2018-04-05 10:32:59

标签: java-8

我正在尝试使用Lambda表达式连接两个字符串。我创建了功能接口StringFormatter,它具有格式化方法,该方法将两个字符串作为参数。它应该返回String。 ans应返回“Lambda Expression”或返回“Lambda - Expression”,具体取决于lambda表达式。

public class Main {
    public static void main(String[] args) {
        String s1="Lambda";
        String s2="Expression";
        new Main().print(s1,s2);
    }

    public void print(String st1, String st2) {
       String result= (st1, st2) -> { return st1+" "+ st2;}; /*error- The target type of this expression must be a functional interface*/
       System.out.println(result);

    }
}
@java.lang.FunctionalInterface
interface StringFormatter {
    abstract String format(String s1, String s2);
}

3 个答案:

答案 0 :(得分:2)

我想你想要这样的东西:

public class Main {

    public static void main(String[] args) {
        String s1="Lambda";
        String s2="Expression";

        // format 1
        new Main().print(s1,s2, (str1, str2) -> str1 + " " + str2);

        // format 2
        new Main().print(s1,s2, (str1, str2) -> str1 + "-" + str2);

    }

    void print(String str1, String str2, StringFormatter formatter) {
        String result = formatter.format(str1, str2);
        System.out.println(result);
    }

}

@java.lang.FunctionalInterface
interface StringFormatter {
    String format(String s1, String s2);
}

答案 1 :(得分:1)

更简单的解决方案:

import java.util.function.BinaryOperator;

// Define the printing function with this lambda
BinaryOperator<String> printFunction = (string1, string2) -> string1 + " " + string2;

// Call it and get the result
System.out.println(print(st1, st2));

答案 2 :(得分:0)

java.util.function包中提供了BinaryOperator接口。它可以用于对两个T类型的值执行二进制操作(例如:连接)并返回T类型的结果。

public void print(String st1, String st2) {
        BinaryOperator<String> concat = (a, b) -> a + " " + b;
        System.out.println(concat.apply(st1, st2));
}