1

下面我有一个粗略的实现,在 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:])
4

2 回答 2

4

是的,这是可能的,大致如下:

interface Predicate<A> {
    boolean eval(A argument);
}

Predicate<Integer> gt0 = new Predicate<Integer>() {
    boolean eval(Integer arg) {
        return arg > 0;
    }
};

你看,这有点冗长,但它确实完成了工作。

于 2013-02-12T21:30:13.260 回答
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 中执行相同的简单操作。

于 2013-02-12T21:31:08.023 回答