2013-06-18 66 views
0

我有一個Iterable,我需要檢查一下iterable中的特定字符串。我試過iter.contains("my string"),但它不起作用。任何想法?我正在尋找一個包含像iterable的方法

+3

我們需要額外的信息(就像這個評論需要更多關於我們需要什麼樣的數據的數據)。 – Pshemo

+1

你能展示更多的代碼嗎? 「iter」究竟是指什麼? –

+0

http://stackoverflow.com/questions/2925765/why-does-iterator-have-a-contains-method-but-iterable-does-not-in-scala-2-8 – lamilambkin

回答

0

嘗試

iter.toString().toLowerCase().equals("my string") 
+0

這不是問題,我認爲他想要這樣做而不是遍歷元素......爲什麼是一個謎,但它是。 –

+0

好的。我認爲這個問題就像他試圖迭代元素並直接與'iter'對象進行比較。 – NFE

+0

@VTT所以這是關於'Iterator'而不是'Iterable'? –

3

Iterable是一個接口,它不包含像contains這樣的方法,因爲這會假設底層數據結構可以順序讀取而不會損壞。

兩者都不是Iterable接口所做的假設。

3

你只有一個裸露的Iterable的真正選擇是做一個裸的for循環:

for (String string : iterable) { 
    if (string.equals(foo)) { 
    return true; 
    } 
} 
return false; 

...或者你可以調用另一種基本上做同樣事情的方法,例如番石榴的Iterables.contains(Iterable, Object)

2

Interface Iterable只返回一個Iterator。所以如果某個值在裏面,就不可能直接獲得。相反,你必須迭代使用for-each結構,例如

boolean found = false; 
for (String s: iter) { 
    if (s.equals("my string")) { 
     found = true; 
     break; 
    } 
} 

根據大小,這可能不是很有效。但如果它是你唯一的選擇......它至少會起作用。

+2

Björn有多個錯誤,例如'String'而不是'String',並且在'String'上使用'=='而不是'equals()'。 –

+0

@owlstead:你說得對。感謝您的評論!我糾正了錯誤。 –

相關問題