2016-07-26 82 views
-3

我試圖閱讀新的java.util.functionConsumer,SupplierFunction爲什麼我們需要Java 8中的消費者和供應商功能?

我不明白爲什麼我們需要他們,這是什麼問題,他們解決了什麼問題?

請給我一個沒有這些API和新API的使用示例,並解決了什麼問題?

+3

你的意思是2個接口'Consumer'和'Supplier'?如果是這樣,你讀了他們的JavaDocs嗎?你讀過關於lambda的文章嗎? – Thomas

+0

是的,我的意思是2接口消費者和供應商我閱讀javadocs,但我不明白他們爲什麼解決 – user1365697

+3

他們是常見的[功能接口](http://docs.oracle.com/javase/8/docs/api/java /util/function/package-summary.html#package.description)旨在用作[lambda表達式]的目標(https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html)。 – Jesper

回答

3

也許你認爲他們必須比他們更復雜。

它們被設計成超級簡單的代碼片段,它們本身並沒有太多的功能,但是您可以將代碼片段傳遞給可以使用這些代碼片段的庫。

這個例子打印使用供應商和消費者

Stream.generate(UUID::random) // <<< Supplier<UUID> 
     .limit(100) 
     .forEach(System.out::println); // <<< Consumer<UUID> 

100點的UUID較長的例子是

Supplier<UUID> uuidSupplier = UUID::random; 
Consumer<UUID> uuidConsumer = System.out::println; 
Stream.generate(uuidSupplier) 
     .limit(100) 
     .forEach(uuidConsumer); 
+0

對不起,但我不明白在這個例子中供應商和消費者是如何解釋 – user1365697

+2

@ user1365697「供應商」解決了當你需要能夠告訴圖書館如何根據需要創建對象和消費者'解決了告訴圖書館關於你想要爲每個對象執行的動作的問題。 –

+0

如果我不使用供應商和消費者該怎麼樣看起來像?在這個例子中,你沒有使用它們,所以我有點困惑 – user1365697