在C#中,当我们想要创建可以将lambda表达式作为参数的方法时,我们可以使用Action
或Func<T>
,具体取决于具体情况。新的Java 8增加了对lambdas的支持,但我找不到任何关于如何使用它的体面的例子。所以假设我想在Java中创建一个类似于这个C#的方法:
public static Boolean Check (String S, Func<String, Boolean> AnAction) {
return AnAction(S);
}
这究竟是用Java编写的呢?
答案 0 :(得分:5)
运行时的Lambda表达式基本上是functional interface的一个实例。因此,任何将函数接口类型作为参数的方法都可以传递一个lambda表达式。
例如,Java 8在java.util.function
包中定义了许多现成的功能接口。你可以使用其中一个。甚至你可以创建自己的。用例的等效值为java.util.function.Function<T, R>
。对于布尔返回值,您可以直接使用Predicate
。
假设您的方法定义如下:
public static boolean check(String testString, Predicate<String> predicate) {
return predicate.test(testString);
}
然后你可以像这样调用它:
check("Some String to test predicate on", s -> s.length() > 10);
答案 1 :(得分:2)
如果您的lambda返回boolean
,则可以使用Predicate
:
public static boolean check (String s, Predicate<String> pred)
{
return pred.test(s);
}
或者您可以使用常规Function
:
public static Boolean check (String s, Function<String,Boolean> func)
{
return func.apply(s);
}