我使用Guava,特别是他们的不可变集合(ImmutableList
,ImmutableSet
)。
但是Guava是为Java 6编译的。如果我使用Java 8,我可以使用.stream()
吗?
答案 0 :(得分:11)
是的,你可以。
.stream()
方法,在Collection
界面has a default implementation中定义。就此而言,.parallelStream()
和.spliterator()
也是如此。 List
和Set
s"都是" Collection
秒。
它并没有结束,因为你也可以在Guava的ImmutableMap
上使用Map
's .forEach()
。 Map
确实有其他默认操作,但是他们会改变地图,而番石榴的不可变集合/地图是......嗯......
请注意,更一般地说,每次接口的方法都有默认实现时,将在javadoc中提及,因为方法的返回类型将为之前是default
关键字。
一些样本,非常粗糙的代码可以使用它(以及lambdas中使用的单一抽象方法的概念,有关详细信息,请参阅here):
ImmutableSet.of(23, 2389, 19).stream().forEach(System.out::println);
(System.out
是PrintStream
,其.println()
method签名与Consumer
的签名相同
答案 1 :(得分:0)
由于这个事实,ImmutableList
实现Collection
和Iterable
,它们是Java 8
提供的接口,具有您枚举的方法的默认实现,答案是你给了并不是一个惊喜,对吗?
也许问题应重述为:ImmutableList
实施Collection
和Iterable
?因为如果确实如此,Java 8
提供的所有默认方法都是可用的。特别是:.stream()
,.parallelStream()
和.spliterator()
。
但是答案只需要查询Guava提供的JavaDoc,这也不是什么大问题。