包含Iterable和Iterator的方法?

Rol*_*and 10 java collections iterator iterable

是否有一个简单的方法来检查元素是否包含在迭代或迭代器中,类似于Collection.contains(Object o)方法?

即不必写:

Iterable<String> data = getData();
for (final String name : data) {
    if (name.equals(myName)) {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想写:

Iterable<String> data = getData(); 
if (Collections.contains(data, myName)) {
    return true;
}
Run Code Online (Sandbox Code Playgroud)

我真的很惊讶没有这样的事情.

Stu*_*rks 9

在Java 8中,您可以将其Iterable转换为a Stream并使用anyMatch它:

String myName = ... ;
Iterable<String> data = getData();

return StreamSupport.stream(data.spliterator(), false)
                    .anyMatch(name -> myName.equals(name));
Run Code Online (Sandbox Code Playgroud)

或使用方法参考,

return StreamSupport.stream(data.spliterator(), false)
                    .anyMatch(myName::equals);
Run Code Online (Sandbox Code Playgroud)


Mik*_*Hay 5

Guava 有函数Iterables.containsIterators.contains可以做你想做的事。您可以查看源代码以了解如何自己实现它们。