2012-04-11 71 views
20

Java foreach是否有條件?有條件的Java Foreach

例如,

for(Foo foo : foos && try == true) 
{ 
//Do something 
} 

是否有一個相當於這一點,這樣我可以把AND條件內for

+0

欲瞭解更多信息,您可能需要看看http://stackoverflow.com/a/3433775/197574 – DerMike 2012-04-11 10:56:53

+0

\ @anyone,請當我有一個lib可用時ping我。非常感謝你提前! – 2014-01-17 19:55:42

回答

16

編號

您可以改爲使用while循環。

Iterator iterator = list.iterator(); 
while(iterator.hasNext()) { 
    ... 
} 
+0

可能是min^infinity minimin min。 – 2012-04-11 10:55:28

+2

-1嘗試是一個關鍵字,你將有編譯器錯誤.. – 2013-01-07 07:09:28

+6

@NandKumarTekale - 這不是Nim的問題;他正在按照OP的寫法行事。 – JoshDM 2013-11-15 20:04:53

8

否,的foreach是專門只爲迭代的陣列或集合的所有元素而設計的。

如果你想讓你可以檢查它裏面的條件,並使用中斷關鍵字中間出環路。

10

不,沒有這樣的事情。 「增強的for循環」是一個完全獨立的構造,除了通過參數Iterable返回的迭代器的lopp之外什麼也不做。

你可以做的是這樣的:

for(Foo foo : foos) 
{ 
    //Do something 
    if(!condition){ 
     break; 
    } 
} 
+0

猜測foreach並不是那麼優雅。 – 2012-04-11 10:56:20

+0

這是某種任務的工具。 – DerMike 2012-04-11 10:57:56

+0

@ TJ-:其實,我會說做一件事情只會讓它更優雅。類似C的for循環將迭代,初始化和任意複雜的條件和迭代步驟集中在一個超級強大的構造中,只是以與95%的情況完全相同的方式使用。*這種情況非常不雅觀。 – 2012-04-11 10:59:32

0

Java 8,您可以它。例如:

foos.forEach(foo -> { 
     if(try) { 
      --your code-- 
     } 
    }); 
+0

太容易提供-1沒有任何解釋。 – 2016-09-26 13:58:46

+0

,因爲您只是將條件放入循環體中。在Java 8中,原始問題會是這樣的:Java 8 foreach是否有條件?例如:'foos.forEach(try,foo - > { - 您的代碼 - });',其中'try'是Predicate。 – foal 2016-10-17 16:31:54

0

你可以得到最接近的可能是過濾初始迭代:

for(Foo foo : filter(foos)) { 
    //Do something 
} 

當過濾器方法返回一個包含僅針對您的病情,並持有這些元素的迭代。例如有番石榴,你可以寫一個過濾器的方法是這樣的:

Iterable<String> filter(Iterable<String> foos) { 
    return Iterables.filter(foos, 
      input -> input.equals("whatever"); 
} 
1

的for-each不能具備的條件,這裏是你問的是等效的:

Iterator<Foo> iterator = foos.iterator(); 
while(iterator.hasNext() && condition == true) { 
    //Do something 
}