Java 函数式接口中的 Lambda
Lambdas in FunctionalInterfaces in Java
我正在尝试在 Java
中使用 lambda,但完全不明白它是如何工作的。我这样创建 @FunctionalInterface
:
@FunctionalInterface
public interface MyFunctionalInterface {
String getString(String s);
}
现在在我的代码中我使用 lambda
如下:
MyFunctionalInterface function = (f) -> {
Date d = new Date();
return d.toString() + " " + person.name + " used fnc str";
};
接下来,我想利用我的 function
将其传递给另一个 class 的构造函数并像这样使用它:
public SampleClass(MyFunctionalInterface function) {
String tmp = "The person info: %s";
this.result = String.format(tmp, function.getString(String.valueOf(function)));
}
为什么我需要在这里使用它valueOf()
?我以为感谢这个我可以只使用 function.getString()
?
输出:
Tue Sep 19 11:04:48 CEST 2017 John used fnc str
您的 getString
方法需要一个 String
参数,因此您不能在没有任何参数的情况下调用它。
也就是说,您的 lambda 表达式会忽略 String
参数,而是从某个 person
变量(您没有在声明它的地方显示)获取数据。
也许您的功能接口应该采用 Person
参数:
@FunctionalInterface
public interface MyFunctionalInterface {
String getString(Person p);
}
MyFunctionalInterface function = p -> {
Date d = new Date();
return d.toString() + " " + p.name + " used fnc str";
};
public SampleClass(MyFunctionalInterface function, Person person) {
String tmp = "The person info: %s";
this.result = String.format(tmp, function.getString(person));
}
或者,您可以从函数式接口的方法中删除参数:
@FunctionalInterface
public interface MyFunctionalInterface {
String getString();
}
MyFunctionalInterface function = () -> {
Date d = new Date();
return d.toString() + " " + person.name + " used fnc str";
};
public SampleClass(MyFunctionalInterface function) {
String tmp = "The person info: %s";
this.result = String.format(tmp, function.getString());
}
我正在尝试在 Java
中使用 lambda,但完全不明白它是如何工作的。我这样创建 @FunctionalInterface
:
@FunctionalInterface
public interface MyFunctionalInterface {
String getString(String s);
}
现在在我的代码中我使用 lambda
如下:
MyFunctionalInterface function = (f) -> {
Date d = new Date();
return d.toString() + " " + person.name + " used fnc str";
};
接下来,我想利用我的 function
将其传递给另一个 class 的构造函数并像这样使用它:
public SampleClass(MyFunctionalInterface function) {
String tmp = "The person info: %s";
this.result = String.format(tmp, function.getString(String.valueOf(function)));
}
为什么我需要在这里使用它valueOf()
?我以为感谢这个我可以只使用 function.getString()
?
输出:
Tue Sep 19 11:04:48 CEST 2017 John used fnc str
您的 getString
方法需要一个 String
参数,因此您不能在没有任何参数的情况下调用它。
也就是说,您的 lambda 表达式会忽略 String
参数,而是从某个 person
变量(您没有在声明它的地方显示)获取数据。
也许您的功能接口应该采用 Person
参数:
@FunctionalInterface
public interface MyFunctionalInterface {
String getString(Person p);
}
MyFunctionalInterface function = p -> {
Date d = new Date();
return d.toString() + " " + p.name + " used fnc str";
};
public SampleClass(MyFunctionalInterface function, Person person) {
String tmp = "The person info: %s";
this.result = String.format(tmp, function.getString(person));
}
或者,您可以从函数式接口的方法中删除参数:
@FunctionalInterface
public interface MyFunctionalInterface {
String getString();
}
MyFunctionalInterface function = () -> {
Date d = new Date();
return d.toString() + " " + person.name + " used fnc str";
};
public SampleClass(MyFunctionalInterface function) {
String tmp = "The person info: %s";
this.result = String.format(tmp, function.getString());
}