2015-11-03 28 views
1
for (Sample i : DATA) { 
     for(Sample ii : DATA){ 

      if(i.getID() == ii.getID()){ 
       // Do nothing. 
      }else { 
       i.addMatch(new Match(ii.getID())); 
      } 
     } 
    } 

我有一個List<Sample>每個Sample包含List<Match>List<Match>是與另一個Sample匹配的Samples的集合。因此,List<Match>包含所有原始樣本減去它們被比較的原始樣本。使用聚合替換嵌套for循環

Q1:這裏的聚合操作是否有用?如果不是,我怎麼知道它們是什麼時候?

Q2:如果是,那麼編寫它的適當方法是什麼?

編輯:Java lesson on Aggregate Operations.

+0

我說得對不對,你想用'Stream'來代替你的構造? – Flown

+0

@Flown我編輯了我的問題。希望現在更清楚。 – Alexander

+0

'集合操作處理來自流的元素,而不是直接來自集合。因此,它們也被稱爲流操作。所以這意味着你想用'Stream'操作替換你的嵌套循環 - 就像我之前說過的那樣。 – Flown

回答

1

Q1:都是集合操作有用嗎?如果不是,我怎麼知道它們是什麼時候?

它們在你的案例中部分有用。如果你想遍歷一個Collection,最好使用老式的foreach循環,因爲它沒有創建管道的開銷。但是,您的內循環適合處理Stream,因爲您可以過濾和映射每個元素。

Q2:如果是,那麼編寫該文件的適當方法是什麼?

for (Sample sample : DATA) { 
    DATA.stream() 
     .mapToInt(Sample::getId).filter(id -> id != sample.getId()).mapToObj(Match::new) 
     .forEach(m -> sample.addMatch(m)); 
}