如何使用Java 8 lambda和Steam API获取元素的总和

问题描述:

如何将下面的内容转换为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的总和,但没有帮助?基本上我需要日记大小的总和。

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