in src/main/java/org/apache/commons/collections4/IteratorUtils.java [885:928]
public static Iterator<?> getIterator(final Object obj) {
if (obj == null) {
return emptyIterator();
}
if (obj instanceof Iterator) {
return (Iterator<?>) obj;
}
if (obj instanceof Iterable) {
return ((Iterable<?>) obj).iterator();
}
if (obj instanceof Object[]) {
return new ObjectArrayIterator<>((Object[]) obj);
}
if (obj instanceof Enumeration) {
return new EnumerationIterator<>((Enumeration<?>) obj);
}
if (obj instanceof Map) {
return ((Map<?, ?>) obj).values().iterator();
}
if (obj instanceof NodeList) {
return new NodeListIterator((NodeList) obj);
}
if (obj instanceof Node) {
return new NodeListIterator((Node) obj);
}
if (obj instanceof Dictionary) {
return new EnumerationIterator<>(((Dictionary<?, ?>) obj).elements());
}
if (obj.getClass().isArray()) {
return new ArrayIterator<>(obj);
}
try {
final Method method = obj.getClass().getMethod("iterator", (Class[]) null);
if (Iterator.class.isAssignableFrom(method.getReturnType())) {
final Iterator<?> it = (Iterator<?>) method.invoke(obj, (Object[]) null);
if (it != null) {
return it;
}
}
} catch (final RuntimeException | ReflectiveOperationException ignore) { // NOPMD
// ignore
}
return singletonIterator(obj);
}