对不起这个简单的问题-我来自.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
}
});