2013-08-04 52 views
5

我們可以使用舊的for循環(for(i = 0, j = 0; i<30; i++,j++))兩個變量 我們可以使用for-each循環(或增強的for循環)在Java中(for(Item item : items)兩個變量是什麼?對於語法?Java中新的for循環可以與兩個變量一起使用嗎?

+4

這不是一個'新的loop',它基本上是一個foreach循環。你不能。 – MightyPork

+1

@MightyPork它*增強了循環*。 –

+0

名稱如何改變它的用途和用途?它相當於foreach循環。 – MightyPork

回答

7

不幸的是,Java支持只是一個初步的foreach循環稱爲增強的for循環。其他語言,特別是像Scala這樣的FP,支持一種稱爲列表理解的構造(Scala將其稱爲,理解爲),它允許嵌套迭代以及沿途元素的過濾。

9

無你不能。它是利用Iterator語法糖。參見here在這個問題一個很好的答案。

你需要有一個包含兩個變量的對象。

它可以在地圖對象上顯示例如,

for (Map.Entry<String,String> e: map.entrySet()) { 
    // you can use e.getKey() and e.getValue() here 
} 
+0

'Map'沒有實現'Iterable'。 – BalusC

+0

當然,非常感謝!修正了我的例子 – Tala

+0

入口集。 – arynaq

1

foreach循環假定只有一個事物集合。你可以爲每個迭代的每個元素做些事情。如果你能一次迭代兩個集合,你希望它的行爲如何?如果他們有不同的長度呢?

假設你有

Collection<T1> collection1; 
Collection<T2> collection2; 

你可以寫一個迭代器包裝,迭代都返回某種合併的結果。

for(TwoThings<T1, T2> thing : new TwoCollectionWrapper(collection1, collection2) { 
    // one of them could be null if collections have different length 
    T1 t1 = thing.getFirst(); 
    T2 t2 = thing.getSecond(); 
} 

這是我能想到的最接近的,但我沒有看到太多用處。如果兩個集合都要迭代在一起,首先創建一個Collection<TwoThings>會更簡單。

除了並行迭代,你可能也想循序迭代。有這樣的實現,例如番石榴的Iterables.concat()

1

簡單的答案「否」已經給出。但是你可以實現兩個迭代器作爲參數,並返回來自兩個迭代器的元素對。 Pair是兩個字段的類。你必須自己實現它,或者它可能存在於某些apache公共或類似的lib中。

這個新的迭代器可以在foreach循環中使用。

2

下面應該有你想要達到相同的(表現)功效:

List<Item> aItems = new List<Item>(); 
List<Item> bItems = new List<Item>(); 
... 
Iterator aIterator = aItems.iterator(); 
Iterator bIterator = bItems.iterator(); 
while (aIterator.hasNext() && bIterator.hasNext()) { 
    Item aItem = aIterator.next(); 
    Item bItem = bIterator.next(); 
} 
相關問題