2015-12-11 95 views
0

讓說這個代碼避免雙迴路

Class A{ 
     private B; 
     private int totalNumberAWithB; 
    }  

    enum B { 
     type1,type2,type3; 
} 

如果我有

List<A> a; 

如果我有一個名單,他們可以有或不是B例子,我想有在totalNumberAWithB包含B類型的所有A的值。

任何想法如何有效地做到這一點。現在我想到的唯一想法是創建一個B類型的地圖編號。然後在完成這個循環後再次做同樣的循環,但是這次只需在A中設置B類型的總值。但是對於我來說,做這個雙循環看起來相當不合適。

任何建議的想法?

+0

這有點不清楚。你想在'A'類裏面存儲'totalNumberAWithB'嗎?那麼A的每個實例都會有相同的數字? – Tunaki

+2

我想說,如果你在談論少量(數百個)'A'和'B's,你就是在浪費你的時間來考慮效率。此外,效率從來就不是「看起來」的情況。 – Kayaman

+0

恐怕是功能需求。我同意每個A具有相同的價值根本沒有效率。 – paul

回答

1

在Java 8,你可以申請一個過濾器流:

a.stream().filter(e -> e.getB() != null).collect(toList()); 

,或者只是想指望你可以和:

a.stream().filter(e -> e.getB() != null).sum(); 

過濾謂詞可安排您的需求,或者你甚至可以映射元素,然後用減少操作來計算聚合。 這是一個可以通過map/reduce解決的問題。