下面我在Python中测试一个整数列表lambda函数的粗略实现。我知道Java目前不支持闭包或lambdas(但是),但我很好奇,这在Java中是否可以远程实现?
pos = [lambda x : x > 0, "pos"]
even = [lambda x : x % 2 == 0, "even"]
small = [lambda x : x < 100, "small"]
def pass_test(x, tests):
if (len(tests) == 0): return []
else:
if (tests[0][0](x)): return [tests[0][1]] + pass_test(x, tests[1:])
else: return pass_test(x, tests[1:])
答案 0 :(得分:4)
是的,这可能是:
interface Predicate<A> {
boolean eval(A argument);
}
Predicate<Integer> gt0 = new Predicate<Integer>() {
boolean eval(Integer arg) {
return arg > 0;
}
};
你知道,这有点冗长,但它确实起到了作用。
答案 1 :(得分:1)
在你的情况下,python函数可以像这样映射到Java:
public interface Function {
String do(int x);
}
// ...
Function pos = new Function(){
public String do(int x) {
return (x > 0) ? "pos" : "";
}
}
Function even = new Function(){
public String do(int x) {
return (x % 2 == 0) ? "even" : "";
}
}
Function small = new Function(){
public String do(int x) {
return (x < 100) ? "small" : "";
}
}
// ...
如您所见,您需要更多代码才能在Java中执行相同的简单操作。