@Override
            public boolean matches(Object item) {
                Iterable components = (Iterable) item;
                if (!components.iterator().hasNext()) {
                    //empty collection
                    return false;
                }
                for (Object componentInList : components) {
                    boolean allMethodsMatch = false;
                    for (MethodResult result : results) {
                        Object strToMatch;
                        try {
                            Method method = componentInList.getClass().getMethod(result.getMethodName());
                            strToMatch = method.invoke(componentInList);
                        } catch (Exception e) {
                            allMethodsMatch = false;
                            break;
                        }
                        if (result.getExpectedResult().equals(strToMatch)) {
                            allMethodsMatch = true;
                        } else {
                            allMethodsMatch = false;
                            break;
                        }
                    }
                    if (allMethodsMatch) {
                        return true;
                    }
                }
                return false;
            }
A match is found if at least <em>one</em> item in the Iterable has <em>all</em> given methods, <em>and</em>
the return values when calling them equals the given expected values.

@param results The pairs of method names and expected results to compare.
@return A Matcher to match against an Iterable.
testutil/src/main/java/com/yahoo/test/Matchers.java