我使用Guava,特别是它们的不可变集合(ImmutableList,ImmutableSet)。
但是Guava是为Java6编译的,如果我使用Java8,我可以在它们上使用.stream()吗?
发布于 2014-03-26 19:56:17
是的你可以。
在Collection接口has a default implementation中定义的.stream()方法。就此而言,.parallelStream()和.spliterator()也是如此。并且List%s和Set%s“都是”Collection%s。
而且它并没有到此为止,因为您还可以在Guava的ImmutableMaps上使用Map's .forEach()。Map确实有其他的默认操作,但是它们改变了映射,并且Guava的不可变的集合/映射是...好吧..。
注意,更一般的情况是,每次接口的方法有一个缺省实现时,它的返回类型都会在javadoc中被提及,因为该方法的返回类型前面将带有关键字default 。
一些样本,非常粗糙的代码,可以工作并利用它(以及lambdas中使用的单个抽象方法的概念,请参阅here了解更多细节):
ImmutableSet.of(23, 2389, 19).stream().forEach(System.out::println);(System.out为PrintStream,其.println() method签名与Consumer相同)
发布于 2014-03-26 20:09:59
由于ImmutableList实现了Collection和Iterable,这是Java 8提供的接口,对于您列举的方法具有默认实现,所以您给出的答案并不令人惊讶,对吧?
也许这个问题应该重申一下:ImmutableList是否实现了Collection和Iterable?因为如果是这样的话,Java 8提供的所有默认方法都是可用的。特别是:.stream()、.parallelStream()和.spliterator()。
但是,答案只需要查找Guava提供的JavaDoc,这也不是什么大问题。
https://stackoverflow.com/questions/22660268
复制相似问题