对不起这个简单的问题-我来自.NET堆栈。我想要的只是一个内联谓词。请告诉我我在做什么错:

toReturn = Iterables.find(articles, a -> a.toString().equals(input));


它告诉我“ a不能解析为变量”。我假设我只需要导入,或者我正在使用旧版本的Java?提前致谢!

最佳答案

您要尝试执行的操作在Java 7或更早版本中是不可能的。它存在于Java 8及更高版本中。在Java 7及更低版本中,您可以使用lambdaj达到类似的效果。它看起来像这样:

toReturn = Iterables.find(articles, new Predicate<Object>() {
    public boolean apply(Object item) {
            return item.toString().equals(input);
    }
});


您可以查看更多详细信息here

编辑:
正如评论中指出的那样,还有其他选择。当您使用Iterables时,我猜想您需要一个可以非常相似地定义的com.google.common.base.Predicate

toReturn = Iterables.find(articles, new Predicate<Object>() {
    public boolean apply(Object item) {
            return item.toString().equals(input);
    }

    public boolean equals(Object obj) {
        // check whether the other object is also a Predicate
    }
});

09-04 04:47
查看更多