0

我有一个 Iterable,我需要检查 iterable 中的特定字符串。我试过iter.contains("my string")了,但它不起作用。任何的想法?

4

5 回答 5

3

Iterable 是一个接口,它不包含像 contains 这样的方法,因为这会假设底层数据结构可以按顺序读取而不会损坏。

Iterable 接口所做的假设也不是。

于 2013-06-18T18:02:35.673 回答
3

你唯一真正的选择Iterable是做一个裸for循环:

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

...或者您可以调用另一种基本相同的方法,例如 Guava 的Iterables.contains(Iterable, Object).

于 2013-06-18T18:09:55.160 回答
2

Interface Iterable 只返回一个 Iterator。因此,如果某个值在里面,则无法直接获取。相反,您必须使用 for-each 结构进行迭代,例如

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

根据大小,这可能不是很有效。但如果它是你唯一的选择……它至少会起作用。

于 2013-06-18T18:13:19.830 回答
0

尝试

iter.toString().toLowerCase().equals("my string")
于 2013-06-18T18:04:35.733 回答
0

尝试创建一个迭代器对象,在大多数编程语言中都有一个包含迭代器的方法

这是一个非常相似的问题 ,在 Scala 2.8 中为什么 Iterator 有 contains 方法但 Iterable 没有?

于 2013-06-18T18:05:27.670 回答