簡體   English   中英

我使用Guava的不可變集合(為Java 6編譯)和Java 8 JRE,我可以使用新的流接口嗎?

[英]I use Guava's immutable collections (compiled for Java 6) and a Java 8 JRE, can I use the new stream interface?

我使用Guava,特別是它們的不可變集合( ImmutableListImmutableSet )。

但是Guava是為Java 6編譯的。如果我使用Java 8,我可以使用.stream()嗎?

是的你可以。

所述.stream()方法,它是在所定義的Collection的接口, 具有一個默認的實現 就此而言, .parallelStream().spliterator() ListSet都是“ Collection ”。

它並沒有結束,因為你也可以在Guava的ImmutableMap上使用Map.forEach() Map確實有其他默認操作,但是它們會改變地圖,而Guava的不可變集合/地圖是...嗯......

需要注意的是更普遍, 每一個接口的方法有一個默認的實現時,它在javadoc中提到的,由於方法的返回類型將與前面default關鍵字

一些樣本,非常粗糙的代碼可以使用它(以及lambdas中使用的單一抽象方法的概念,請參閱此處了解更多詳細信息):

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

System.out是一個PrintStream ,其.println()方法簽名與Consumer簽名相同)

由於這一事實, ImmutableList實現了CollectionIterable ,它們是Java 8提供的接口,具有您枚舉的方法的默認實現,您給出的答案並不令人驚訝,對吧?

也許這個問題應該重述為: ImmutableList實現了CollectionIterable 因為如果是這樣, Java 8提供的所有默認方法都是可用的。 特別是: .stream() .parallelStream().spliterator()

但接下來的答案只需要查看Guava提供的JavaDoc,這也不是什么大問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM