我正在尝试使用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);
}
答案 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));
}