2013-02-18 101 views
-1

如果滿足特定條件,我將如何中斷循環?打破Groovy中的每個循環

我的輸入文件有大約n行。如果所需的信息在第m行得到,我需要打破循環而不是讀取其餘的行。

new File("test.txt").readLines().reverseEach{line -> 
    println line 

    if(line.contains("Data")) 
    break; 
} 

回答

0

你不能從封閉中突破。您可以拋出異常並退出,也可以根本不使用閉包。讀取數組/列表中的所有行並遍歷它。

3

您可以使用find來做到這一點。查找結束第一次返回閉環返回true並返回最後找到的元素。

(1..20).find{ 
    println it 
    it == 5 
} 

將在常規控制檯下面。

1 
2 
3 
4 
5 
Result: 5 
+0

像這樣使用'find'假定它在您正在使用的Groovy的版本/實現中實現爲單線程順序算法。 – 2013-02-21 10:08:17

+0

@VorgvanGeir好吧,你有一個點。 groovy文檔只聲明[「查找與IDENTITY Closure匹配的第一個項目」](http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html#find())。出於好奇...有沒有任何Groovy實現可以做到這一點,例如,多線程還是非順序? – hsan 2013-02-21 10:38:47