Java内联谓词:无法解析为变量

Java内联谓词:无法解析为变量,java,predicate,Java,Predicate,很抱歉问这么简单的问题-我来自.NET堆栈。我只需要一个内联谓词。请告诉我我做错了什么: toReturn = Iterables.find(articles, a -> a.toString().equals(input)); 它告诉我‘a不能解析为变量’。我假设我只需要导入,或者我使用的是旧版本的Java?提前谢谢 在Java7或更早的版本中,您试图做的是不可能的;它存在于Java8和更高版本中。使用Java7和更早版本,您可以使用类似的效果。它看起来像这样: toReturn=It

很抱歉问这么简单的问题-我来自.NET堆栈。我只需要一个内联谓词。请告诉我我做错了什么:

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

它告诉我‘a不能解析为变量’。我假设我只需要导入,或者我使用的是旧版本的Java?提前谢谢

在Java7或更早的版本中,您试图做的是不可能的;它存在于Java8和更高版本中。使用Java7和更早版本,您可以使用类似的效果。它看起来像这样:

toReturn=Iterables.find(articles,new Predicate()){
公共布尔应用(对象项){
返回item.toString().equals(输入);
}
});
您可以查看更多详细信息

编辑: 正如评论中指出的那样,还有其他选择。当您使用时,我猜您会想要一个定义非常类似的:

toReturn=Iterables.find(articles,new Predicate()){
公共布尔应用(对象项){
返回item.toString().equals(输入);
}
公共布尔等于(对象obj){
//检查另一个对象是否也是谓词
}
});

在Java 7或更早版本中,您尝试执行的操作是不可能的;它存在于Java8和更高版本中。使用Java7和更早版本,您可以使用类似的效果。它看起来像这样:

toReturn=Iterables.find(articles,new Predicate()){
公共布尔应用(对象项){
返回item.toString().equals(输入);
}
});
您可以查看更多详细信息

编辑: 正如评论中指出的那样,还有其他选择。当您使用时,我猜您会想要一个定义非常类似的:

toReturn=Iterables.find(articles,new Predicate()){
公共布尔应用(对象项){
返回item.toString().equals(输入);
}
公共布尔等于(对象obj){
//检查另一个对象是否也是谓词
}
});

您使用Java 8吗?@SotiriosDelimanolis我正在尝试找出答案,但我不确定哪种方法最简单。有什么建议吗?你是如何编译你的源代码的?如果您确定您使用的是相同的JDK,请在命令行上执行
java-version
;最终版本尚未发布。嗯。。我猜“1.7.0_45”是史前的吗?你在用Java 8吗?@SotiriosDelimanolis我想知道,但我不确定最简单的方法。有什么建议吗?你是如何编译你的源代码的?如果您确定您使用的是相同的JDK,请在命令行上执行
java-version
;最终版本尚未发布。嗯。。我猜“1.7.0_45”是史前的?番石榴也是一个可以接受的替代品,它提供了这样的功能。感谢您提供的详细信息和替代实现!再一次,我想这可能是个问题,但我只是想得到社区的确认。我假设我的Java版本低于8。Guava也是一个可以接受的替代方案,它提供了这样的功能。感谢您提供的详细信息和替代实现!再一次,我想这可能是个问题,但我只是想得到社区的确认。我假设我的Java版本小于8。