2017-10-29 362 views
-1

如何將下面的內容轉換爲Stream API和lambda表達式。如何使用Java 8 lambda和Steam API獲取元素的總和

double journalSize = 0; 
List<PersistenceAdapter> allKahadb = ((MultiKahaDBPersistenceAdapter)persistenceAdapter).getAdapters(); 



for (PersistenceAdapter persistenceAdapter : allKahadb) { 
    Journal journal = ((KahaDBPersistenceAdapter) persistenceAdapter).getStore().getJournal(); 
    int noOfJournels = journal.getFiles().size(); 
    long journalMaxSize = journal.getMaxFileLength(); 
    journalSize += (journalMaxSize * noOfJournels)/ Memory.ONE_MB; 
} 

我試着用map和stream的總和,但沒有幫助?基本上我需要日記大小的總和。

回答

1

map你的對象Journal實例,然後將它們映射到double值要總結:

double journalSize = 
    allKahadb.stream() 
      .map(pa -> ((KahaDBPersistenceAdapter)pa).getStore().getJournal()) 
      .mapToDouble(j -> ((double) j.getMaxFileLength() * j.getFiles().size())/Memory.ONE_MB) 
      .sum(); 
+0

感謝葉蘭的幫助,如何處理內部地圖例外(() - >),實際上(( KahaDBPersistenceAdapter)pa).getStore()。getJournal())拋出IO異常。 將整個代碼片段放入try catch中並不奏效。 我剛開始使用Stream,嘗試用Stream找到方法 – Ankit

相關問題