我使用Guava的不可变集合(为Java 6编译)和Java 8 JRE,我可以使用新的流接口吗?

时间:2014-03-26 11:56:05

标签: java collections guava java-8

我使用Guava,特别是他们的不可变集合(ImmutableListImmutableSet)。

但是Guava是为Java 6编译的。如果我使用Java 8,我可以使用.stream()吗?

2 个答案:

答案 0 :(得分:11)

是的,你可以。

.stream()方法,在Collection界面has a default implementation中定义。就此而言,.parallelStream().spliterator()也是如此。 ListSet s"都是" Collection秒。

它并没有结束,因为你也可以在Guava的ImmutableMap上使用Map's .forEach()Map确实有其他默认操作,但是他们会改变地图,而番石榴的不可变集合/地图是......嗯......

请注意,更一般地说,每次接口的方法都有默认实现时,在javadoc中提及,因为方法的返回类型将为之前是default关键字

一些样本,非常粗糙的代码可以使用它(以及lambdas中使用的单一抽象方法的概念,有关详细信息,请参阅here):

ImmutableSet.of(23, 2389, 19).stream().forEach(System.out::println);

System.outPrintStream,其.println() method签名与Consumer的签名相同

答案 1 :(得分:0)

由于这个事实,ImmutableList实现CollectionIterable,它们是Java 8提供的接口,具有您枚举的方法的默认实现,答案是你给了并不是一个惊喜,对吗?

也许问题应重述为:ImmutableList实施CollectionIterable?因为如果确实如此,Java 8提供的所有默认方法都是可用的。特别是:.stream().parallelStream().spliterator()

但是答案只需要查询Guava提供的JavaDoc,这也不是什么大问题。