2016-03-16 13 views
2

据我所知,Predaates in Guava是为了填补Java中的空白,在Predicates被引入到Java 8之前。现在,当Java中有这样的功能时,使用Guava Predicates是否仍然有意义?那有什么附加价值吗?我应该使用Guava Predicate还是Java Predicate?

+1

不,那不是。在Java 8甚至开始正式化之前,Guava已经有了一些预言。如果你使用Java 8,你可以使用Java 8提供的东西,特别是因为你可以重用你的Guava谓词(如果有的话),无论如何都要使用方法引用。 – fge

回答

8

如果您有机会使用Java 8,那么“去为它”。历史上,在Java 8甚至形式化之前,Guava确实定义了PredicateFunction和其他这样的“函数接口”(因为它们现在被称为);实际上,它们是一样的。

然而,不同的是,Java 8带来的语法最大限度地利用了JSR 292的强大功能,这就是为什么Objects::nonNull是有效的(java.util.function。)Predicate<Object>。因此,虽然Guava以很多方式在这些接口方面“早于”Java 8,但如果您使用Java 8,那么请使用Java 8.使用Java的函数,而不是Guava的等等。如果您已经拥有Guava的这种接口实例,你可以很容易地在Java 8中重用它们;例如,给定一个Guava谓词,把它变成一个Java 8谓词就像:

myPredicate::apply 
+1

嗨,谢谢你的回答。在Guava中使用Predicates的一个想法是,您可以与API的其余部分进行互操作,例如Iterables。在某些情况下,是不是仍然喜欢番石榴比Java谓词更好的理由?或者,Java是否提供了lambda表达式的替代形式?谢谢。 –

+0

看看你今天如何使用'Iterables';如果你可以看到一个简单的替代流,那么为什么不呢。当然,不要一下子把所有东西都替换掉。使用你的大脑:) – fge

+0

是的,当然:)事情是,目前我只是习惯与番石榴一起工作,因为这是我最近一直在研究的项目中使用的。现在我要开始一个新项目,所以我想我真正想问的是我是否能够使用“纯Java”来实现我在Java 8之前只能在Guava中实现的想法。 –

相关问题